【问题标题】:Computing a UIImage to be saved to the photo album计算要保存到相册的 UIImage
【发布时间】:2009-09-28 18:03:57
【问题描述】:

我基本上想从一堆源图像中自动创建一个平铺图像,然后将其保存到用户的相册中。我没有成功将一堆小的 UIImage 绘制到一个大的 UIImage 中。实现这一目标的最佳方法是什么?目前我正在使用 UIGraphicsBeginImageContext() 和 [UIImage drawAtPoint] 等。我最终得到的只是一个 512x512 的黑色方块。我应该怎么做?我正在寻找 CGLayer 等。似乎有很多选择,但没有一个特别容易工作。

让我把我的代码放进去:

CGSize size = CGSizeMake(512, 512);
UIGraphicsBeginImageContext(size);
UIGraphicsPushContext(UIGraphicsGetCurrentContext());
for (int i = 0; i < 4; i++)
{
    for (int j = 0; j < 4; j++)
    {
        UIImage *image = [self getImageAt:i:j];
        [image drawAtPoint:CGPointMake(i*128,j*128)];
    }
}
UIGraphicsPopContext();
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(result, nil, nil, nil);

我应该注意,实际上上面的内容不是在我的代码中发生的事情。真正发生的是,我在 UIGraphicsPushContext 之前调用每一行,包括 UIGraphicsPushContext,然后在动画计时器中,我慢慢地增加绘图并绘制到上下文。然后在这一切完成后,我从 UIGraphicsPopContext 开始调用所有内容。

【问题讨论】:

    标签: iphone objective-c bitmap uiimage cglayer


    【解决方案1】:

    哦,那么你可以在屏幕上渲染后保存屏幕上的视图:

     UIGraphicsBeginImageContext(myBigView.bounds.size);
        [view drawRect:myBigView.bounds];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    

    您是否将其存储回图像?

    UIImage *myBigImage = UIGraphicsGetImageFromCurrentImageContext();
    

    【讨论】:

    • 好的,试着去掉这些行: UIGraphicsPushContext(UIGraphicsGetCurrentContext());和 UIGraphicsPopContext();
    • 不,我有一个 OpenGL 视图,它是当前的图形上下文,并且在任何地方都没有其他 UIView。我正在截取 OpenGL 数据并尝试将其平铺到完全不同的 UIImage 中。这样做的目的基本上是在一张 sprite sheet 中获得多个角度的 3D 模型。
    • 您的上下文感觉有些不对劲(这主要是预感,因为我不使用 OpenGL)。我觉得这就是为什么你得到一个黑色方块的原因,因为你没有在你认为的上下文中绘画。你能这样做吗: UIGraphicsPushContext(UIGraphicsBeginImageContext(size));还是会引发异常?
    【解决方案2】:

    做我想做的事……

    使您的 GLView 与您想要的总大小一样大。还要确保 glOrtho 和您的视口具有正确的大小。然后在任何你想要的地方画出你想要的任何东西,并拍摄一个 OpenGL 屏幕截图。那么您就不必担心通过多个 OpenGL 渲染通道组合到单个 UIImage,这无疑是导致我的问题的原因。

    【讨论】:

      猜你喜欢
      • 2012-09-23
      • 1970-01-01
      • 2012-02-14
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多