我想获得UIImage的中心16像素的平均UIColor,但是结果颜色永远不会接近正确。我在这里做错了什么?点参数是正确的,我已经验证了这一点。我还有另一种方法,它使用这个效果很好的相同点返回中心像素的UIColor。UIImage和查找中心像素的平均UIColor
+ (UIColor*)getAverageColorForImage:(UIImage *)image atLocation:(CGPoint)point
{
int radialSize = 2;
int xStartPoint = point.x - radialSize;
int yStartPoint = point.y - radialSize;
int xEndPoint = point.x + radialSize;
int yEndPoint = point.y + radialSize;
CGImageRef rawImageRef = [image CGImage];
CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider(rawImageRef));
const UInt8 *rawPixelData = CFDataGetBytePtr(data);
NSUInteger bytesPerRow = CGImageGetBytesPerRow(rawImageRef);
NSUInteger stride = CGImageGetBitsPerPixel(rawImageRef)/8;
unsigned int red = 0;
unsigned int green = 0;
unsigned int blue = 0;
for(int row = yStartPoint; row < yEndPoint; row++)
{
const UInt8 *rowPtr = rawPixelData + bytesPerRow * row;
for(int column = xStartPoint; column < xEndPoint; column++)
{
red += rowPtr[0];
green += rowPtr[1];
blue += rowPtr[2];
rowPtr += stride;
}
}
CFRelease(data);
CGFloat f = 1.0f/(255.0f * (yEndPoint - yStartPoint) * (xEndPoint - xStartPoint));
return [UIColor colorWithRed:f * red green:f * green blue:f * blue alpha:1.0f];
}
感谢您指出了这一点。我已经更新了代码,但是颜色仍然会出现 - 尽管当我指向图像的不同部分时颜色现在正在改变。我得到了很多紫色,粉红色,紫罗兰。我想,还有些事情还没有结束。我试着将radialSize变量降到1来尝试平均更少的像素,但仍然不正确。 – mservidio
你可以上传一个示例图片,并写出明确的调用你的方法? – Danilo
实际上尝试别的,我会更新我的答案。 – Danilo