0

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

1 回答 1

2

好吧,除非你真的想和他们在一起,否则你不需要画CGBitmapContext它们。用于CGImageCreateWithImageInRect()创建子图像。这不一定要求框架复制任何图像数据。它可能只是引用原始图像数据。因此,它可能非常有效。

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

于 2012-04-29T17:09:00.593 回答