ios – 将UIView转换为UIImage时出现透明度问题

ios – 将UIView转换为UIImage时出现透明度问题,第1张

概述我想从UIView创建一个UI Image对象.视图不透明. 因为我正在使用以下代码: + (UIImage *) imageWithView:(UIView *)view { UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, [[UIScreen mainScreen] scale]); 我想从UIVIEw创建一个UI Image对象.视图不透明.
因为我正在使用以下代码:
+ (UIImage *) imageWithVIEw:(UIVIEw *)vIEw {         UIGraphicsBeginImageContextWithOptions(vIEw.bounds.size,vIEw.opaque,[[UIScreen mainScreen] scale]);         [vIEw.layer renderInContext:UIGraphicsGetCurrentContext()];         UIImage * img = UIGraphicsGetimageFromCurrentimageContext();     UIGraphicsEndImageContext();         return img; }

但由于某些原因,而不是透明的背景,我得到一个黑色背景的图像.
我已经尝试将UIGraphicsBeginImageContextWithOptions中的“opaque”参数设置为NO,但没有不同的结果.

任何建议?

(类似的问题CGContext transparency problem没有答案)

解决方法 我确定你创建这样的UIImage时不能定义透明度 – 你可以掩盖使用图像的UIImageVIEw.

类似以下功能的类似 *** 作可以实现:

// handles img masking operationCGImageRef copyImageAndAddAlphaChannel(CGImageRef sourceImage) {    CGImageRef retVal = NulL;    size_t wIDth = CGImageGetWIDth(sourceImage);    size_t height = CGImageGetHeight(sourceImage);    CGcolorSpaceRef colorSpace = CGcolorSpaceCreateDeviceRGB();    CGContextRef offscreenContext = CGBitmapContextCreate(NulL,wIDth,height,8,colorSpace,kCGImageAlphaPremultiplIEdFirst);    if (offscreenContext != NulL) {        CGContextDrawImage(offscreenContext,CGRectMake(0,height),sourceImage);        retVal = CGBitmapContextCreateImage(offscreenContext);        CGContextRelease(offscreenContext);    }    CGcolorSpaceRelease(colorSpace);    return retVal;}    // png masks can mask png,gif or jpg...- (UIImage*)maskImage:(UIImage *)image withMask:(UIImage *)maskImage {    CGImageRef maskRef = maskImage.CGImage;    CGImageRef mask = CGImageMaskCreate(CGImageGetWIDth(maskRef),CGImageGetHeight(maskRef),CGImageGetBitsPerComponent(maskRef),CGImageGetBitsPerPixel(maskRef),CGImageGetBytesPerRow(maskRef),CGImageGetDataProvIDer(maskRef),NulL,false);    CGImageRef sourceImage = [image CGImage];    CGImageRef imageWithAlpha = sourceImage;    //add Alpha channel for images that don't have one (IE GIF,JPEG,etc...)    //this however has a computational cost    if ((CGImageGetAlphaInfo(sourceImage) == kCGImageAlphaNone) || (CGImageGetAlphaInfo(sourceImage) == kCGImageAlphaNoneskipFirst))     {         imageWithAlpha = copyImageAndAddAlphaChannel(sourceImage);    }    CGImageRef masked = CGImageCreateWithMask(imageWithAlpha,mask);    CGImageRelease(mask);    //release imageWithAlpha if it was created by copyImageAndAddAlphaChannel    if (sourceImage != imageWithAlpha)     {        CGImageRelease(imageWithAlpha);    }    UIImage* retimage = [UIImage imageWithCGImage:masked];    CGImageRelease(masked);    return retimage;}

你可以这样称呼:

UIImage *imgMasked = [self maskImage:[UIImage imagenamed:@"full_image.png"] withMask:[UIImage imagenamed:@"masked_image.png"]];

masked_image.png需要是一个Alpha通道的图像,它将剪出你的黑色bg.

总结

以上是内存溢出为你收集整理的ios – 将UIView转换为UIImage时出现透明度问题全部内容,希望文章能够帮你解决ios – 将UIView转换为UIImage时出现透明度问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1111785.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存