gpt4 book ai didi

ios - quartz 核 : Changing whole layer pixels color

转载 作者:行者123 更新时间:2023-11-29 04:09:29 25 4
gpt4 key购买 nike

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

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

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

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

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

编辑:

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

有什么想法吗?

最佳答案

事实上,这非常简单。

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?

关于ios - quartz 核 : Changing whole layer pixels color,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14642270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com