在CGBitmapContextCreate之后,Buffere写入变慢

时间:2010-09-29 17:00:50

标签: performance xcode cgimage

我的代码是这样的......

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef ctx = CGBitmapContextCreate(pixelArray, width, height, 8, 4 * width, colorSpace, kCGImageAlphaNoneSkipLast);

CGImageRef createdImage = CGBitmapContextCreateImage (ctx);

uiImage = [[UIImage imageWithCGImage:createdImage] retain];

问题在于,一旦我从缓冲区(pixelArray)创建CGImage和UIImage,对缓冲区的任何写入操作都会变慢至少4倍。这种情况仅发生在iPad设备上而非iPhone上。有人遇到同样的问题吗?这是怎么回事?

这是写操作代码,我在循环中调用它们(setPixel)...

- (RGBA*) getPixel:(NSInteger)x  y:(NSInteger)y {
    // Bound the co-cordinates.
    x = MIN(MAX(x, 0), width - 1);
    y = MIN(MAX(y, 0), height - 1);

    // yIndexes are pre populated
    return (RGBA*)(&pixelArray[(x + yIndexes[y]) << 2]);
}

- (void) setPixel:(RGBA*)color x:(NSInteger)x  y:(NSInteger)y {
    // Bound the co-cordinates.
    x = MIN(MAX(x, 0), _width);
    y = MIN(MAX(y, 0), _height);

    memcpy([self getPixel:x y:y], color, 3);

    colorDirtyBit = YES;
}

1 个答案:

答案 0 :(得分:0)

我不确定出了什么问题,但我相信可能是你的写操作代码速度不同。您是否可以在不使用这些功能的情况下尝试原始编写操作? e.g。

for(int i = 0; i < bufferlen; i++) {
    pixelArray[i] = i; // or any arbitrary value
}