显示混合图层显示红色UII图像,但它没有Alpha通道

时间:2014-05-29 18:19:05

标签: ios objective-c uiscrollview uiimageview uiimage

我有一个没有Alpha频道的图片 - 我在Finder的“获取信息”面板中确认了这一点。然而,当我把它放在UIImageView UIScrollView并且我启用了显示混合图层时,图像为红色表示它正在尝试应用透明度,这将会影响性能。

如何将此修复为绿色,以便iOS知道此视图中的所有内容完全不透明?

我尝试了以下但是没有删除红色:

self.imageView.opaque = YES;
self.scrollView.opaque = YES;

2 个答案:

答案 0 :(得分:12)

默认情况下,UIImage实例在包含Alpha通道的图形上下文中呈现。要避免它,您需要使用opaque = YES

的新图形上下文生成另一个图像
- (UIImage *)optimizedImageFromImage:(UIImage *)image
{
    CGSize imageSize = image.size;
    UIGraphicsBeginImageContextWithOptions( imageSize, opaque, scale );
    [image drawInRect: CGRectMake( 0, 0, imageSize.width, imageSize.height )];
    UIImage *optimizedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return optimizedImage;
}

答案 1 :(得分:0)

Swift 3x Xcode 9x

func optimizedImage(from image: UIImage) -> UIImage {
    let imageSize: CGSize = image.size
    UIGraphicsBeginImageContextWithOptions(imageSize, true, UIScreen.main.scale)
    image.draw(in: CGRect(x: 0, y: 0, width: imageSize.width, height: imageSize.height))
    let optimizedImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return optimizedImage ?? UIImage()
}