我需要从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等。
什么是最简单的方法,如果有代码片段,那就太棒了。
谢谢!
答案 0 :(得分:3)
你走在正确的轨道上。正如您所注意到的,有很多方法可以做到这一点。
一旦有了NSImage,就可以创建一个位图表示,并直接访问它的字节。获取NSBitmapImageRep的简单方法是:
NSBitmapImageRep* imageRep = [[[NSBitmapImageRep alloc] initWithData:[tempImage TIFFRepresentation]] autorelease];
unsigned char* bytes = [imageRep bitmapData];
int bitsPerPixel = [imageRep bitsPerPixel];
// etc
通过TIFFRepresentation步骤比直接访问NSImage的表示更安全。