Я пытаюсь выполнить итерацию по пикселям, чтобы изменить значения RGBA UIImage без использования OpenGL. Я попытался проверить производительность итерации, используя приведенный ниже код, но был очень недоволен. Казалось, что я могу получить только несколько тысяч итераций в секунду. И для UIImage с несколькими сотнями тысяч пикселей это займет много времени ... У кого-нибудь есть предложения по повышению производительности или длительности таких операций, как обычно?Core Graphics имеет плохую производительность итерации PIXEL на iPhone?
-(UIImage*)modifyPixels:(UIImage*)originalImage
{
NSData* pixelData = (NSData*)CGDataProviderCopyData(CGImageGetDataProvider(originalImage.CGImage));
void* pixelBytes = [pixelData bytes];
// Take away the red pixel, assuming 32-bit RGBA
for(int i = 0; i < [pixelData length]; i += 4) {
NSLog(@" %ith iteration (%i/%i/%i/%i)", i, pixelData[i], pixelData[i+1], pixelData[i+2], pixelData[i+3]);
}
//NSData* newPixelData = [NSData dataWithBytes:pixelBytes length:[pixelData length]];
//UIImage* newImage = [UIImage imageWithData:newPixelData];
return originalImage;
}
Обратите внимание, что здесь вы пропускаете pixelData. Функции Core Foundation (и CG by extension), которые включают «Копировать», возвращают вам сохраненный объект. –
Хорошо, спасибо за это. – RexOnRoids