<分区>
<分区>
我需要从 2 个现有图像中获取一个新图像。 (第二个应该显示为第一个下方的 Logo )。问题是,如果顶部(从未尝试过底部)具有透明背景,它会显示为黑色。 这是代码:
+(UIImage *) addBottomOverlayWithImage:(UIImage*) fgImage
inImage:(UIImage*) bgImage {
if(!bgImage) {
return nil;
}
CGFloat minSize = MIN([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);
CGSize maxImageSize = CGSizeMake(minSize-140, minSize-140);
CGSize imageSize = CGSizeMake(maxImageSize.width,
maxImageSize.height+fgImage.size.height*2);// image size including art work and logo
UIGraphicsBeginImageContextWithOptions(imageSize, YES, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
[bgImage drawInRect:CGRectMake( 0, 0, maxImageSize.width, maxImageSize.height)];
[[UIColor whiteColor] setFill];
CGRect targetForFgImage = CGRectMake(0, imageSize.height-fgImage.size.height, imageSize.width, fgImage.size.height); // bottom part , where the logo will be added
CGContextFillRect(context, targetForFgImage);
CGFloat widthForFgImage = MIN(imageSize.width - 22.0, fgImage.size.width);
CGFloat heightForFgImage = MIN(fgImage.size.height,widthForFgImage * 0.3);
UIImage *imageToUse = [fgImage imageScaledToFitSize:CGSizeMake(widthForFgImage, heightForFgImage)]; // the logo size
CGFloat xVal = 11.0;
if (imageSize.width > widthForFgImage) {
xVal = (imageSize.width - widthForFgImage) / 2.0;
}
CGFloat yVal;
if (targetForFgImage.size.height > heightForFgImage) {
CGFloat diff = targetForFgImage.size.height - heightForFgImage;
yVal = (imageSize.height - fgImage.size.height + (diff / 2.0));
} else {
yVal = imageSize.height - heightForFgImage;
}
[imageToUse drawInRect:CGRectMake(xVal, yVal, widthForFgImage, heightForFgImage)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
我应该如何解决这个问题?
最佳答案
只需制作
UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, height)), NO, 1);
设置为“否”以获取更多信息检查 developer document of apple
关于ios - 在 CGContext 中绘制透明 PNG 显示为黑色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51062517/