9

我有一个大图像,它太大而无法加载到内存中,但我只对该大图像中的一组像素感兴趣。是否可以仅将这个像素子集解码到内存中?我知道在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);
4

1 回答 1

10

这可能起作用的唯一可能方法是,如果您创建一个CGImageSourceCreateWithData()(或任何 URL),然后创建一个CGImageRefusingCGImageCreateWithJPEGDataProviderCGImageCreateWithPNGDataProvider. 有了它CGImageRef,您可以尝试使用CGImageCreateWithImageInRect()并拉出大图像的一部分。

如果您要做的是平铺图像,请澄清您的问题,因为那时我会为您提供更多信息。

于 2012-07-25T19:37:57.903 回答