读取图像(标准格式png,jpeg等)并使用Objective C将图像数据写入二进制文件

时间:2011-08-17 18:21:53

标签: cocoa image binary

我对Objective C很新,并且使用Cocoa Framework。我想读取一个图像,然后提取图像数据(只是像素数据,而不是标题),然后将数据写入二进制文件。我有点坚持这个,我正在经历NSImage的方法,但我找不到合适的方法。任何人都可以建议我这样做的其他方法吗?

1 个答案:

答案 0 :(得分:0)

可可,最简单的方法是使用NSBitmapImageRep类。例如,使用NSData对象初始化后,您可以使用NSColor-setColor:atX:y:方法将任意坐标处的颜色值作为-colorAtX:y:对象进行访问。请注意,如果您在紧密循环中调用这些方法,则可能会受到objc_msg_send的性能影响。您可以考虑通过-bitmapData方法将原始位图数据作为C数组访问。例如,在处理RGB图像时,每个通道的颜色值以3的偏移量存储。

例如:

color values: [R,G,B][R,G,B][R,G,B]
     indices: [0,1,2, 3,4,5, 6,7,8]

循环遍历图像中的每个像素并提取RGB分量:

unsigned char *bitmapData = [bitmapRep bitmapData];

if ([bitmapRep samplesPerPixel] == 3) {
    for (i = 0; i < [image size].width * [image size].height; i++) {
        int base = (i * 3);

        // these range from 0-255
        unsigned char red = bitmapData[base + 0];
        unsigned char green = bitmapData[base + 1];
        unsigned char blue = bitmapData[base + 2];
    }
}