Буферная запись замедляется после CGBitmapContextCreate - PullRequest
0 голосов
/ 29 сентября 2010

У меня есть что-то вроде этого ...

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

CGImageRef createdImage = CGBitmapContextCreateImage (ctx);

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

Проблема в том, что после создания CGImage и UIImage из буфера (pixelArray) любые операции записи в буфер становятся как минимум в 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 голосов
/ 30 сентября 2010

Я не уверен, что происходит не так, но я думаю, что это может быть ваш код операции записи, который отличается по скорости. Не могли бы вы попробовать операцию raw-write без использования этих функций? например,

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