石英核心:改变整个层的像素颜色

时间:2013-02-01 08:26:55

标签: ios quartz-core

我正在开发一个在图层上绘制的应用程序。这是一个示例代码,显示了我绘制的方式。

UIImageView * currentLayer = // getting the right layer...
UIGraphicsBeginImageContext(currentLayer.frame.size);
[currentLayer.image drawInRect:currentLayer.bounds];
// Painting...
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
currentLayer.image = img;
UIGraphicsEndImageContext();

所以我有一个有两种像素的图像(1024x768):
- 涂漆(每种颜色相同)
- 透明的

更改整个图层不透明像素的颜色的最佳方法是什么,知道所有像素都具有相同的颜色?

我是否必须逐个重绘每个不透明的像素?

编辑:

正如DavidRönnqvist建议的那样,是通过用我的图层掩盖填充的图像来尝试的。

我想要更改颜色的图层是self.image

// Creating image full of color
CGRect imRect = self.bounds;
UIGraphicsBeginImageContext(imRect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, imRect);
UIImage * fill = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

// masking the image
CGImageRef maskRef = [self.image CGImage];
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                    CGImageGetHeight(maskRef),
                                    CGImageGetBitsPerComponent(maskRef),
                                    CGImageGetBitsPerPixel(maskRef),
                                    CGImageGetBytesPerRow(maskRef),
                                    CGImageGetDataProvider(maskRef), NULL, false);

CGImageRef masked = CGImageCreateWithMask([fill CGImage], mask);
self.image = [UIImage imageWithCGImage:masked];

差不多!它掩盖了我的图层的精确对位:只绘制了alpha像素...

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

事实上,这很简单。

UIImage有一个方法:drawInRect只能绘制不透明的像素。

这是代码(从UIImageView调用):

CGRect rect = self.bounds;
UIGraphicsBeginImageContext(rect.size);
[self.image drawInRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(context, kCGBlendModeSourceIn);
CGContextSetFillColorWithColor(context, newColor.CGColor);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

非常感谢iPhone - How do you color an image?