我正在开发一个在图层上绘制的应用程序。这是一个示例代码,显示了我绘制的方式。
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像素...
有什么想法吗?
答案 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();