2013-08-27 2 views
-2

В моем приложении мне нужно показать первые три средних цвета (в основном используемые цвета) изображения. как я могу это получить? i hv попробовал приведенный ниже код, чтобы получить один средний цвет, но мне нужно три цвета на основе его уровня подарков. ex. Пример вывода:
синий # 0000FF Аква # 00FFFF Серый # 808080Как получить первые три средних цвета изображения?

- (UIColor *) averageColor {

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
unsigned char rgba[4]; 
CGContextRef context = CGBitmapContextCreate(rgba, 1, 1, 8, 4, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 

CGContextDrawImage(context, CGRectMake(0, 0, 1, 1), given_Img.CGImage); 
CGColorSpaceRelease(colorSpace); 
CGContextRelease(context); 
UIColor *colorOfArtwork; 



if(rgba[3]) { 
    NSLog(@"rgba[3]"); 
    CGFloat alpha = ((CGFloat)rgba[3])/255.0; 
    CGFloat multiplier = alpha/255.0; 

    return colorOfArtwork = [UIColor colorWithRed:((CGFloat)rgba[0])*multiplier 
            green:((CGFloat)rgba[1])*multiplier 
             blue:((CGFloat)rgba[2])*multiplier 
            alpha:alpha]; 
} 
else { 
    return colorOfArtwork = [UIColor colorWithRed:((CGFloat)rgba[0])/255.0 
             green:((CGFloat)rgba[1])/255.0 
             blue:((CGFloat)rgba[2])/255.0 
             alpha:((CGFloat)rgba[3])/255.0]; 
} 

}

enter image description here

+0

как фиолетовый, желтый и все такое. – Megan

+0

Поместите код, если вы что-то пробовали .. – parilogic

+0

Что вы подразумеваете под «на основе его приоритета»? –

ответ

1

NSMutableDictionary * dicColors;

петли через каждый пиксель, если вход в dicColors то увеличивает значение, мудрым добавить новую запись в dicColors для этого цвета с начальным значением 1.

обращенных в NSArray и сортировать

получить первые 3 элемента массива. Если ваше изображение пустым или сплошным цветом, этот массив может содержать только 1 или 2 записи, поэтому проверьте это тоже.

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