我有一个太大的图像,无法加载到内存中,但我只对该大图像中的一组子像素感兴趣。是否有可能只将这个像素子集解码到内存中?我知道在Android中有一个API来完成这个叫做BitmapRegionDecoder的类就是这样的
我找到了CGDataProviderCreateSequential,但它需要构造函数中的原始像素......
现在我正在做这样的事情:
UIImage* srcImage = ...;
CFDataRef cgImgDataRef = CGDataProviderCopyData(CGImageGetDataProvider(srcImage.CGImage));//After this call, all pixels are decoded into memory and the app crashes
char* imageData = (char*)CFDataGetBytePtr(cgImgDataRef);
答案 0 :(得分:10)
唯一可行的方法是,如果您创建CGImageSourceCreateWithData()
(或任何URL),则使用CGImageRef
或CGImageCreateWithJPEGDataProvider
创建CGImageCreateWithPNGDataProvider
。使用CGImageRef
,您可以尝试使用CGImageCreateWithImageInRect()
并拉出大图像的子部分。
如果你要做的是平铺图像,请澄清你的问题,因为我会为你提供更多信息。