iOS:从图像的每个像素中获取顶部颜色

时间:2013-08-27 06:22:31

标签: iphone objective-c ios5 ios6

在我的项目中,我需要显示给定图像的前三种颜色(查看下面的示例图像)。功能要求是我必须分别在图像的每个像素中获得前三种颜色,然后必须为所有像素计算这些颜色。最后,给定图像中的前三种颜色必须列为输出。 (看了看GPUImage,但我找不到符合我要求的代码)。谢谢..

enter image description here

1 个答案:

答案 0 :(得分:1)

使用双重for循环尝试以下函数。我想,我找到了一些人在这里发布的代码,然后进行了一些修改。我不再开发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值。然后将颜色值存储在数组中以用于您的目标。