2010-09-29 3 views
0

У меня есть код что-то вроде этого ...Buffere запись становится медленным после CGBitmapContextCreate

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; 
} 
+0

Сообщите нам свой код для вашей операции записи? – tia

+0

Я обновил вопрос с помощью кода записи. – Abix

ответ

0

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

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

Я уже пробовал это, но это не помогает. Если я создаю другой буфер и создаю memcpy (newBuffer, pixelArray) и выполняю операции записи, все будет хорошо. Похоже, что как только я создаю изображение из блока памяти, к нему привязан какой-то обратный вызов, не знаю, как это возможно. – Abix