从图像的像素值创建颜色

时间:2009-11-14 06:44:36

标签: iphone

我正在尝试实现一个应用程序,其中我将彩色图像显示为自定义View的backgroundColor。用户触摸图像上的特定区域(显示为视图的背景颜色),触摸所在的像素应该检索出现并使用UIColor创建相应的颜色。

我有一个代码,以便从ImageView访问特定像素,如下所示:

CFDataRef CopyImagePixels(CGImageRef inImage)
{
    return CGDataProviderCopyData(CGImageGetDataProvider(inImage));
}

从上面的代码中,我得到了图像的原始像素数据。然后我创建了一个自定义UIView,并将特定的图像设置为自定义视图的背景颜色。然后我使用方法“handleTouchesBegan”捕获了Touches。然后我从参数中得到了x和y坐标。代码如下:

获取像素值:

    NSData *rawData = (NSData *)CGDataProviderCopyData(CGImageGetDataProvider(image1.CGImage));
    uint *x = malloc (rawData.length);
    NSLog(@"Length of raw data :%d", rawData.length);
    [rawData getBytes: x]; 

触摸touchesBegan方法:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

    for (UITouch *touch in touches) 
    {
        // Sends to the dispatch method, which will make sure the appropriate subview is acted upon
        CGPoint pt =  [touch locationInView:upperImage];
        indexValue = pt.x * pt.y;

        int alpha = x[indexValue];
                  int red = x[indexValue + 1];
                  int green = x[indexValue + 2];
                  int blue = x[indexValue + 3];

        self.view.backgroundColor =  [ UIColor  colorWithRed:red green:green blue:blue alpha:alpha];
        // TODO : compare the values with raw image Bytes ...
    }
}

问题是我无法创建上面的颜色..任何帮助将不胜感激...

最诚挚的问候,

Mohammed Sadiq。

2 个答案:

答案 0 :(得分:0)

alpha值可能位于开头或结尾,具体取决于位图的格式。 RGB值也可以与α值预乘。您可以使用CGImageGetBitmapInfo获取有关位图格式的更多信息。

打印RGB值并查看它们是否正确。

答案 1 :(得分:0)

听起来像this question类似的问题。