2013-08-27 1 views
0

В моем проекте мне нужно показать три верхних цвета для изображения (смотрите образ образца ниже). Требование к функциональности заключается в том, что я должен получить три верхних цвета в каждом пикселе изображения отдельно, тогда они должны быть рассчитаны для всех пикселей. наконец, три верхних цвета в данном изображении должны быть указаны как выходные. (посмотрел на GPUImage, но я не смог найти код для моего требования). Спасибо ..iOS: получить максимальные цвета из каждого пикселя изображения

enter image description here

+0

Вы ищете пиксельные цвета или общие цвета, найденные на сцене? (например, на вашем изображении много зеленого цвета, но на самом деле существует много разных цветов пикселей, которые действительно близки друг к другу.) –

+0

ищет пиксельные цвета RGB – Megan

+0

Вы имеете в виду цвета RGB, которые появляются больше всего? Если это так, я уверен, что это можно сделать, но это может занять от нескольких до нескольких секунд, в зависимости от количества пикселей на изображении. –

ответ

1

Попробуйте следующую функцию с двойными для петель. Я взял код, который кто-то разместил здесь, а затем внес некоторые изменения, я думаю. Я больше не разрабатываю iOS. Поэтому я не могу ответить на подробные вопросы. Но вы должны иметь возможность получить представление об этой функции.

- (UIColor *)getRGBAsFromImage:(UIImage *)image atX:(CGFloat)xx atY:(CGFloat)yy { 
    CGImageRef imageRef = [image CGImage]; 
    NSUInteger width = CGImageGetWidth(imageRef); 
    NSUInteger height = CGImageGetHeight(imageRef); 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    unsigned char *rawData = (unsigned char*) calloc(height * width * 4, sizeof(unsigned char)); 
    NSUInteger bytesPerPixel = 4; 
    NSUInteger bytesPerRow = bytesPerPixel * width; 
    NSUInteger bitsPerComponent = 8; 
    CGContextRef context = CGBitmapContextCreate(rawData, width, height, 
              bitsPerComponent, bytesPerRow, colorSpace, 
                 kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 
    CGColorSpaceRelease(colorSpace); 
    CGContextDrawImage(context, CGRectMake(0,0,width,height),imageRef); 
    CGContextRelease(context); 

    int index = 4*((width*yy)+xx); 
    int R = rawData[index]; 
    int G = rawData[index+1]; 
    int B = rawData[index+2]; 
    UIColor *aColor; 
    aColor = [UIColor colorWithRed:R/255.0 green:G/255.0 blue:B/255.0 alpha:1.0]; 
    rValue = R; gValue = G; bValue = B; 
    free(rawData); 
    return aColor; 
} 

// Обновленный //

Пример

UIColor *c = [self getRGBAsFromImage:colorImage1.image atX:0 atY:0]; // colorImage1 is UIImageView 

размеры Получить изображения, в первую очередь. Затем используйте double for-loop для повторения значений x и y. Затем сохраните значение цвета в массиве для своей цели.

+0

отлично, а что и почему значения должны передаваться в параметрах (atX: (CGFloat) xx atY: (CGFloat) yy)? – Megan

+0

Я добавил дополнительные пояснения. –

 Смежные вопросы

  • Нет связанных вопросов^_^