0

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

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

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

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

我必须一个一个地重绘每个不透明的像素吗?

编辑 :

正如 David Rö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 像素......

任何的想法 ?

4

1 回答 1

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 - 你如何为图像着色?

于 2013-02-01T11:48:05.800 回答