UIImage的像素/char解释

3
以下代码将jpg转换为字符字符串。
 CGImageRef imageRef = example.CGImage;
    NSData *data     = (NSData *) CGDataProviderCopyData(CGImageGetDataProvider(imageRef));
    char *pixels     = (char *)[data bytes];

以下是部分输出:

"GJYˇKO[ˇFJSˇILQˇKNSˇKKSˇOOYˇMMYˇNNVˇOOWˇOOWˇNNVˇLLTˇKKSˇMMUˇOOWˇJMT"

我猜想这三个符号在一起构成了一个像素的信息,对吗?
如果是这样,我该如何解释这些符号(比如颜色)?

2个回答

3
这将取决于您图片的颜色空间。如果有一个alpha通道,4个char将组成一个像素,否则将是3个char。如果它是RGBA,那么G就是您的R,J就是您的G,Y就是您的B,而ˇ就是您的A。如果是ARGB,那么G就是您的A等等。另外,在将像素转换为char*时,请记住跟踪长度,因为任何RGBA值为0都会导致空终止。

谢谢!你知道我怎么可以获取有关颜色布局的信息吗? - Malte Onken
CGColorGetColorSpace(imageRef) http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGColor/Reference/reference.html - Joe
我也会问你为什么要将字节转换为char*,如果只是为了好玩或某种酷炫的功能,那就继续吧;但如果是出于性能或存储的考虑,你可能需要重新考虑一下。 :) - Joe

0

你不能像那样打印位图。正如@Joe所说,char是单个颜色组件,但任何零都会终止字符串,并且尝试以这种方式打印NSData的字节存在许多其他问题。

假设RGBA颜色空间,我处理它的方式是这样的;

struct {
    char red;
    char green;
    char blue;
    char alpha;
} color;
color *bitmap = (color *)[data bytes];
for(int i = 0;i < [data length] / sizeof(color);i++) {
    NSLog(@"%d, %d, %d, %d", colors[i].red, colors[i].green, colors[i].blue, colors[i].alpha);
}

如果您的图像不在RGBA颜色空间中,则需要调整颜色结构以匹配它。

此外,此代码未经编译,而是从我的脑海中输入到此帖子中。不能保证它不会重新格式化您的硬盘,请在复制和粘贴之前三思。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接