
因为我正在使用以下代码:
+ (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时出现透明度问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)