首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIImage混合模式问题

UIImage混合模式问题
EN

Stack Overflow用户
提问于 2012-07-15 13:54:44
回答 1查看 2.4K关注 0票数 0

我正试着叠加2张图片。底部图像从图像库加载到alpha设置为1.0的UIImageView对象中。此图像中的所有像素的alpha值也为1.0。我在上下文中创建的第二个图像。此图像的alpha值因像素而异。在上下文中创建第二个图像后,我将其绘制到显示在第一个UIImageView之上的第二个UIImageView。这第二个UIImageView的alpha也设置为1.0。两个UIImageViews都将background属性设置为clear。

我试图在运行时使用滑块更改第二张图像中像素的各个alpha值,但是,我无法获得第二张图像的RGB值以与第一张图像正确混合。我不想混合基于亮度,黑暗等。似乎我想要kCGBlendModeCopy,但这似乎仍然混合基于亮度或一些其他参数。

为了帮助可视化这个问题:假设我的底部UIImageView是一个人的照片。我最上面的UIImageView由两个实心分开的圆圈组成;一个是红色的,一个是绿色的。使用滑块,如果我将红色像素的alpha值从0.0改为1.0,然后再回来,那么红色圆圈应该会淡入到实心红色,并平滑地淡出。

我可以通过将RGB数据数组值设置为等于Alpha值并将Alpha值设置为1.0,来验证我的Alpha值是否正常工作。这显示了一个黑色的圆圈褪色为白色,然后又回来了。

这是我用来创建第二个图像的代码,该图像被覆盖在第一个图像上。

代码语言:javascript
复制
//image <-- is the name of the second UIImageView that's passed to this method
//rgbaDataNew <-- is the name of my pixel data array for the second image

CGContextRef context;
CGImageRef imageRef;    
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

context = CGBitmapContextCreate(rgbaDataNew, width, height, 8, 4 * width, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 
imageRef = CGBitmapContextCreateImage (context);
UIImage * topImage = [UIImage imageWithCGImage:imageRef];

CGContextSetBlendMode(context, kCGBlendModeCopy);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), [topImage CGImage]);

image.image = [UIImage imageWithCGImage:CGBitmapContextCreateImage (context)];

CGColorSpaceRelease(colorSpace);    
CGContextRelease(context);  
CGImageRelease(imageRef);
EN

回答 1

Stack Overflow用户

发布于 2012-07-15 22:53:44

我会用一种略微不同的方式来解决这个问题,但这需要做少量的Quartz工作。

创建一个UIView子类,并添加第一个imageView作为属性,还添加一些其他值来定义您想要对覆盖执行的操作。

在子类的drawRect中,首先使用UIImageView的- (void)drawInRect:(CGRect)rect方法绘制图像。

然后,您可以使用Quartz在图像上准确地绘制对象(使用视图的属性为您提供边框、颜色、不透明度等)。您可以使用quartz轻松找到示例代码。

或者,如果您确实想要使用第二个imageView,则可以在绘制底部视图后,使用第二个视图的- (void)drawInRect:(CGRect)rect blendMode:(CGBlendMode)blendMode alpha:(CGFloat)alpha方法来覆盖它。

在这两种情况下,您都可以使用UIView子类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11489772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档