我需要从JPEG或PNG文件中提取原始RGB位图数据,并使用文件中的所有位,而不是窗口或颜色转换版本。

我是Cocoa的新手,但是好像我使用NSImage打开图像是这样的:

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];


然后,要获取位图数据,似乎有很多选择:Bitmapimage,CGImage等。

最简单的方法是什么,如果有代码片段,那就太好了。

谢谢!

最佳答案

您走在正确的轨道上。您已经注意到,有很多方法可以做到这一点。

拥有NSImage之后,您可以创建位图表示形式,并直接访问其字节。获取NSBitmapImageRep的一种简单方法是执行以下操作:

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

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


与直接访问NSImage的表示相比,执行TIFFRepresentation步骤更安全。

10-07 21:29