由于CGContextDrawImage可能非常昂贵,我正在尝试在检查像素数据时最小化我提供的数据量。如果我有两个图像和它们的交集的CGRect,我可以让CGContextDrawImage只绘制每个独立的交集(导致两个CGContextRefs包含其中一个图像的交集)?
以下是一些不起作用的代码,但应该接近我对一张图片所需的代码......
CGImageRef imageRef = [image CGImage];
NSUInteger width = rectIntersect.size.width;
NSUInteger height = rectIntersect.size.height;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
unsigned char *rawData = (unsigned char*) calloc(height * width * 4, sizeof(unsigned char));
NSUInteger bytesPerPixel = 4;
NSUInteger bytesPerRow = bytesPerPixel * width;
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(rawData, width, height,
bitsPerComponent, bytesPerRow, colorSpace,
kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
// rectIntersect down here contains the intersection of the two images...
CGContextDrawImage(context, rectIntersect, imageRef);
答案 0 :(得分:2)
嗯,除非你真的需要CGBitmapContext
,否则你不需要绘制它们。使用CGImageCreateWithImageInRect()
创建子图像。这不一定要求框架复制任何图像数据。它可能只是参考原始图像数据。所以,它可以非常有效。
如果您确实需要将图像绘制到上下文中,您当然可以只绘制子图像。