我有一张UIImage,显示从网上下载的照片。 我想知道以编程方式发现图像是否为B& W或Color。
答案 0 :(得分:1)
如果您不介意计算密集型任务并且想要完成工作,请检查图像的每像素像素。
这个想法是检查每个单个像素的所有R G B通道是否相似,例如RGB 45-45-45的像素是灰色的,并且43-42-44因为所有通道彼此接近。我正在寻找每个通道都有类似的值(我使用的是10的阈值,但它只是随机的,你必须做一些测试)
一旦你的像素高于你的阈值,你可以打破循环标志图像为彩色
代码未经过测试,只是一个想法,希望没有泄漏。
// load image
CGImageRef imageRef = yourUIImage.CGImage
CFDataRef cfData = CGDataProviderCopyData(CGImageGetDataProvider(imageRef));
NSData * data = (NSData *) cfData;
char *pixels = (char *)[data bytes];
const int threshold = 10; //define a gray threshold
for(int i = 0; i < [data length]; i += 4)
{
Byte red = pixels[i];
Byte green = pixels[i+1];
Byte blue = pixels[i+2];
//check if a single channel is too far from the average value.
//greys have RGB values very close to each other
int average = (red+green+blue)/3;
if( abs(average - red) >= threshold ||
abs(average - green) >= threshold ||
abs(average - blue) >= threshold )
{
//possibly its a colored pixel.. !!
}
}
CFRelease(cfData);