iOS上的动态图像渲染

时间:2010-11-28 05:35:20

标签: ipad graphics ios4

我为我正在为iPad编写的应用程序有编程任务,文档不清楚如何执行此操作。我希望就解决这个问题提出一些好的建议。

基本上,我有一个内存缓冲区,用于存储256x192像素图像的原始RGB。此图像将定期写入,我希望在更新调用时将其显示在屏幕上的768x576像素区域。我希望这相对较快,并且可以通过仅处理实际改变的图像区域来优化它。

我该怎么做呢?我最初的想法是创建一个CGBitmapContext来管理256x192图像,然后从中创建一个CGImage,然后从中创建一个UIImage并更改UIImageView实例的图像属性。这听起来像是一个相当缓慢的过程。

我是在正确的路线还是我应该看一些不同的东西。另一个注意事项是该图像必须与屏幕上的其他UIKit视图共存。

感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:2)

根据我的经验,从位图上下文获取图像实际上非常快。真正的性能影响(如果有的话)将在绘图操作中进行。由于您要缩放生成的图像,因此可以通过以最终大小创建位图上下文并绘制缩放的所有内容来获得更好的结果。

但是,如果使用位图上下文,则必须确保添加Alpha通道(RGBA或ARGB),因为CGBitmapContext不支持RGB。

答案 1 :(得分:1)

好的,我想出了一个解决方案。感谢Justin让我有信心使用位图上下文。最后我使用了这段代码:

CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
CFDataRef data = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault, (UInt8*)screenBitmap, sizeof(UInt32)*256*192, kCFAllocatorNull);
CGDataProviderRef provider = CGDataProviderCreateWithCFData(data);
CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceRGB();

CGImageRef image = CGImageCreate(256, 192, 8, 32, sizeof(UInt32)*256, colourSpace, bitmapInfo, provider, 0, NO, kCGRenderingIntentDefault);

CGColorSpaceRelease(colourSpace);
CGDataProviderRelease(provider);
CFRelease(data);

self.image = [UIImage imageWithCGImage:image];

CGImageRelease(image);

另请注意,screenBitmap是我的UInt32数组,大小为256x192,self是UIImageView派生的对象。这段代码效果很好,但这是正确的做法吗?