如何从UIImage获取Red channel的平均值

时间:2012-05-29 15:18:09

标签: iphone objective-c uiimage rgb pixel

如何从UIImage获得红色通道的平均值。

使用此代码,我可以找出像素的红色通道值(240,160)

CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
const UInt8* data = CFDataGetBytePtr(pixelData);


        int pixelInfo = ((image.size.width * 240) + 160) * 4; // The image is png

        UInt8 red = data[pixelInfo];  

我感兴趣的是找到整个图像的所有像素的红色通道值的平均值,或者只是图像的正方形部分。

这可以不使用320 * 480计算吗?

1 个答案:

答案 0 :(得分:0)

你正在做正确的事。如果您想要平均值,则必须在您正在测量的区域中添加所有红色通道的值。即使你使用过滤器来隔离红色通道,它也必然会成为同样的东西。像我一样经历像素缓冲区是我认为最快的方式。

您可以根据您拥有的其他信息进行优化(例如,它的统一程度),这样您就可以减小矩形的大小。或者您可以跳过其他所有像素(例如或更多)。我想象一下,在照片上,这会产生一个可接受的近似平均结果。它会减少你必须扫描的区域。

只是想给你额外的途径......