计算要保存到相册的UIImage

时间:2009-09-28 18:03:57

标签: iphone objective-c bitmap uiimage cglayer

我基本上想要从一堆源图像中自动创建平铺图像,然后将其保存到用户的相册中。我没有成功地将一堆小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之前和之前调用每一行,然后在动画计时器中我慢慢地增加绘图并绘制到上下文。完成所有操作后,我将从UIGraphicsPopContext开始调用所有内容。

2 个答案:

答案 0 :(得分:1)

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

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

你把它存回图像吗?

UIImage *myBigImage = UIGraphicsGetImageFromCurrentImageContext();

答案 1 :(得分:0)

做我想做的事......

使您的GLView与您想要的总体一样大。还要确保glOrtho和您的视口大小合适。然后在任何你想要的地方绘制任何你想要的东西,并采用一个OpenGL截图。然后你不必担心在多个OpenGL渲染过程中组合到单个UIImage,这无疑是导致我的问题的原因。