Я пытаюсь получить средний UIColor центра 16 пикселей UIImage, однако полученный цвет никогда не близок к правильности. Что я здесь делаю неправильно? Точный параметр правильный, я это проверил. У меня также есть другой метод, который просто возвращает 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