2009-08-29 5 views
0

Как выполнить итерацию на КАЖДОМ ПИКСЕЛЕ в растровом контексте? Я нашел источник, который, кажется, пытается это сделать, но он как-то испорчен. Может ли кто-нибудь сказать мне, как исправить этот код, чтобы я мог выполнять итерацию по RGBA каждого пикселя?Как я могу перебирать RGBA из КАЖДОГО пикселя в растровом контексте?

-(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) { 

     bytes[i] = 0; // red 
     bytes[i+1] = bytes[i+1]; // green 
     bytes[i+2] = bytes[i+2]; // blue 
     bytes[i+3] = bytes[i+3]; // alpha 
    } 

    NSData* newPixelData = [NSData dataWithBytes:pixelBytes length:[pixelData length]]; 
    UIImage* newImage = [UIImage imageWithData:newPixelData]; 

    return newImage; 

}

ответ

2

с CGBitmapContextCreate, обеспечивают буфер для данных, то ваши пиксели будут находиться в нем.
Вы можете это проверить link

+0

с помощью буфера пикселей: RGBA, так что 1 пиксель имеет длину 4 байта, поэтому указатель на буфер можно пройти. – CiNN

+0

Не могли бы вы научить меня, как это сделать, на основе приведенного выше кода? – RexOnRoids

+0

ваш новый код, кажется, делает трюк, меняет байты с pixelBytes и отличает его как unsigned char. Если вы хотите получить доступ к определенному пикселю, эта формула (y * width) + x – CiNN

 Смежные вопросы

  • Нет связанных вопросов^_^