2009-08-30 3 views
3

나는 단지 다음을 원한다 :
UIImage에서 픽셀 RGB를 NSLog하는 방법은 무엇입니까?

1) 픽셀 데이터를 복사한다.
2)으로 반복하고 (얼마나
3) 내가 피투성이을 알아낼 수

새로운 픽셀 데이터에서있는 UIImage 만들기) (255)로 ARGB 값을 NSLog하는 나에게 보여 각 픽셀을 수정 누군가가 픽셀의 RGBA 값을 255로 NSLog하는 법을 말해 줄 수 있다면 자세한 내용을 알아보십시오. 어떻게이 코드를 수정해야합니까? 구체적으로하십시오!

-(UIImage*)modifyPixels:(UIImage*)originalImage 
{ 

NSData* pixelData = (NSData*)CGDataProviderCopyData(CGImageGetDataProvider(originalImage.CGImage)); 
uint myLength = [pixelData length]; 

    for(int i = 0; i < myLength; i += 4) { 


     //CHANGE PIXELS HERE 
     /* 
     Sidenote: Just show me how to NSLog them 
     */ 
     //Example: 
     //NSLog(@"Alpha 255-Value is: %u", data[i]); 
     //NSLog(@"Red 255-Value is: %u", data[i+1]); 
     //NSLog(@"Green 255-Value is: %u", data[i+2]); 
     //NSLog(@"Blue 255-Value is: %u", data[i+3]); 
    } 

    //CREATE NEW UIIMAGE (newImage) HERE 

    return newImage;  
} 

답변

3

이 방향이 효과가 있습니까? 나는이 같은 픽셀 데이터를 얻을 것 :

UInt32 *pixels = CGBitmapContextGetData(ctx); 

#define getRed(p) ((p) & 0x000000FF) 
#define getGreen(p) ((p) & 0x0000FF00) >> 8 
#define getBlue(p) ((p) & 0x00FF0000) >> 16 
// display RGB values from the 11th pixel 
NSLog(@"Red: %d, Green: %d, Blue: %d", getRed(pixels[10]), getGreen(pixels[10]), getBlue(pixels[10])); 
+0

THanks! 이것은 도움이되었습니다. – RexOnRoids

+4

데이터 형식에 대한 가정을하고 있습니다. 이미지가 32bpp ARGB라는 보장은 없습니다. –

1

실제로 이미지를 볼하려는 경우, 당신이 사용할 수있는 플로랑 필레의 NSLogger을 : 이 https://github.com/fpillet/NSLogger

이 아이디어는 당신의 NSLogger 클라이언트를 시작 당신의 바탕 화면, 다음 앱에서 당신은 상단을 향해 이것을 넣어 :

#import "LoggerClient.h" 

그리고 당신의 modifyPixels 방법 당신은 이런 식으로 뭔가를 할 수 있습니다

LogImageData(@"RexOnRoids",  // Any identifier to go along with the log 
      0,     // Log level 
      newImage.size.width, // Image width 
      newImage.size.height, // Image height 
      UIImagePNGRepresentation(newImage)); // Image as PNG 

바탕 화면에서 클라이언트를 시작한 다음 iPhone에서 앱을 실행하면 실제 이미지가 클라이언트에 표시됩니다. 뒤집기, 회전, 색상, 알파 등과 같은 이미지 문제를 디버깅 할 때 매우 편리합니다.

관련 문제