混合两个UIImages会产生意想不到的结果

时间:2013-12-01 22:07:11

标签: ios iphone objective-c uiimage

我将两个图像混合在一起并使用滑块修改alpha值。它们是原始图片和过滤图片。我使用混合来控制滤镜的强度。这是混合函数:

+ (UIImage*)blendImages:(UIImage*)back withTop:(UIImage*)front andAlpha:(float)alpha {    
    // images are same size
    CGSize newSize = CGSizeMake(back.size.width, back.size.height);
    UIGraphicsBeginImageContextWithOptions(newSize, NO, back.scale);

    // use existing opacity as is on background image
    [back drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    // Apply supplied opacity on foreground
    [front drawInRect:CGRectMake(0,0,newSize.width,newSize.height)
        blendMode:kCGBlendModeNormal alpha:alpha];

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

一切正常,但是有一些alpha值(在这个例子中是0.7f)我得到的结果就像这个(不是突出显示的区域):

result one

如果我稍后再做相同的事情(即相同的功能,相同的alpha值),我得到我想要的结果:

result two

如果我继续使用过滤器,我有时会将亮点变成洋红色或青色。整件事情完全不可预测。但是在某些情况下它是可重复的。以前有没有人经历过这个?将alpha图像与alpha混合的替代方法也非常受欢迎。两个图像(iphone屏幕分辨率)的混合应该不会超过四分之一秒。

请帮忙。

1 个答案:

答案 0 :(得分:0)

代码看起来大致正确。您确定从后方图像进入的“比例”值是否正确?如果规模与UIScreen规模不同,可能会以某种方式抛弃阉割。我会尝试手动将比例设置为2.0(如果在视网膜设备上)或1.0(如果在非视网膜上)并查看问题是否消退。