2011-12-20 2 views
3

JPEG 또는 PNG 파일에서 원시 RGB 비트 맵 데이터를 추출해야합니다. 파일의 모든 비트가 포함되며 창 또는 색상 변환 버전이 아닙니다.코코아를 사용하여 JPEG 이미지에서 비트 맵 데이터 얻기

나는 코코아에 새로 온 사람,하지만이 같은 NSImage를 사용하여 이미지 열 것 같습니다 : Bitmapimage,의 CGImage 등 :

NSString* imageName=[[NSBundle mainBundle] pathForResource:@"/Users/me/Temp/oxberry.jpg" ofType:@"JPG"]; 
NSImage* tempImage=[[NSImage alloc] initWithContentsOfFile:imageName]; 
NSBitmapImageRep* imageRep=[[[NSBitmapImageRep alloc] initWithData:[tempImage TIFFRepresentation]] autorelease]; 
unsigned char* bytes=[imageRep bitmapData]; 
int bits=[imageRep bitsPerPixel]; 

그런 옵션이 많이있을 것 같습니다 비트 맵 데이터를 얻을 수를

가장 간단한 방법은 무엇이며 코드 스 니펫이있는 경우 그 방법이 좋습니다.

감사합니다.

답변

3

올바른 길을 가고 있습니다. 당신이주의했듯이, 이것을하는 많은 방법이 있습니다.

일단 NSImage가 있으면 비트 맵 표현을 만들고 그 바이트에 직접 액세스 할 수 있습니다. NSBitmapImageRep를 얻는 쉬운 방법은이 작업을 수행하는 것입니다 다음 TIFFRepresentation 단계를 거치지

NSBitmapImageRep* imageRep = [[[NSBitmapImageRep alloc] initWithData:[tempImage TIFFRepresentation]] autorelease]; 

unsigned char* bytes = [imageRep bitmapData]; 
int bitsPerPixel = [imageRep bitsPerPixel]; 
// etc 

직접 NSImage의 표현을 액세스하는 것보다 안전합니다.

+0

도움을 주셔서 감사합니다,하지만 어떤 이유로, 이미지 중 하나가로드지고 있지 않거나 나는 bitsPerPixel 0을 얻을로 BitmapImageRep은 작동하지 않습니다. 이미지가로드되었는지 어떻게 알 수 있습니까? (코코아 레그에서 아주 새로워서 죄송합니다.) 변경 사항을 반영하기 위해 원래 게시물의 코드를 편집했습니다. – Bill

+0

확인 방법을 알아 냈지만 여전히 이미지를로드 할 수 없습니다. 해당 폴더에 파일이 있습니다. – Bill

+0

디버거에서 코드를 단계별로 실행하면 무엇이 실패했는지 확인할 수 있습니다. 이미지가로드되지 않으면 tempImage는 0이됩니다. 디버거는 친구입니다. 대신있는 NSString의 –

관련 문제