屏幕中所有像素的颜色

时间:2014-04-24 12:14:41

标签: ios pixel

我想知道所有像素的颜色,并希望返回它的数组。这就是我到目前为止的做法:

- (NSMutableArray *) colorOfPointinArray{

    NSMutableArray *array_of_colors=[[NSMutableArray alloc] init];
    unsigned char pixel[4]={0};
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(pixel, 1, 1, 8, 4, colorSpace, kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedLast);
    for (int x_axis=0; x_axis<screenWidth; x_axis++)
    {
        for (int y_axis=0; y_axis<screenHeight; y_axis++)
        {
            CGContextTranslateCTM(context, -x_axis, -y_axis);
            [self.layer renderInContext:context];

            UIColor *color = [UIColor colorWithRed:pixel[0]/255.0 green:pixel[1]/255.0 blue:pixel[2]/255.0 alpha:pixel[3]/255.0];

            [array_of_colors addObject:color];
        }
    }
    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);

    return array_of_colors;
}

现在,这需要花费很多时间并冻结应用程序。我认为这是因为我添加了2个for-loops。我怎样才能改善这个?

2 个答案:

答案 0 :(得分:0)

您正在创建1x1像素上下文,然后将图像渲染为该像素h * w次。难怪它永远消失!相反,创建一个与图层大小相同的上下文,然后只渲染一次该上下文。然后循环生成的像素并保留颜色值。这可能仍然不是瞬间的;取决于图层的大小,将每个像素转换为UIColor仍然需要一段时间(以及一些非常重要的记忆),但如果您真的想要输出,那么它在一般情况下会得到的速度快得多形式。

答案 1 :(得分:0)

这类似于从图像中采样像素颜色值的问题。关于这一点有很多帖子。这个有一些很好的例子:How to get the RGB values for a pixel on an image on the iphone