CGContextDrawImage仅包含两个图像的交集

时间:2012-04-29 16:49:31

标签: ios xcode ios5 bitmap

由于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);

1 个答案:

答案 0 :(得分:2)

嗯,除非你真的需要CGBitmapContext,否则你不需要绘制它们。使用CGImageCreateWithImageInRect()创建子图像。这不一定要求框架复制任何图像数据。它可能只是参考原始图像数据。所以,它可以非常有效。

如果您确实需要将图像绘制到上下文中,您当然可以只绘制子图像。