我想知道所有像素的颜色,并希望返回它的数组。这就是我到目前为止的做法:
- (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。我怎样才能改善这个?
答案 0 :(得分:0)
您正在创建1x1像素上下文,然后将图像渲染为该像素h * w次。难怪它永远消失!相反,创建一个与图层大小相同的上下文,然后只渲染一次该上下文。然后循环生成的像素并保留颜色值。这可能仍然不是瞬间的;取决于图层的大小,将每个像素转换为UIColor仍然需要一段时间(以及一些非常重要的记忆),但如果您真的想要输出,那么它在一般情况下会得到的速度快得多形式。
答案 1 :(得分:0)
这类似于从图像中采样像素颜色值的问题。关于这一点有很多帖子。这个有一些很好的例子:How to get the RGB values for a pixel on an image on the iphone