2009-08-29 4 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; 

} CGBitmapContextCreate와

답변

2

는 버퍼를 제공한다.
link

+0

버퍼를 사용하여 픽셀이 RGBA가되도록 1 픽셀이 4 바이트이므로 버퍼를 가리키는 포인터로 볼 수 있습니다. – CiNN

+0

위의 코드를 기반으로이 작업을 수행하는 방법을 가르쳐 주시겠습니까? – RexOnRoids

+0

새 코드가 트릭을 수행하고 pixelBytes로 바이트를 변경하여 unsigned char로 캐스팅 한 것으로 보입니다. 특정 픽셀에 액세스하려면이 공식 (y * 너비) + x – CiNN