ios - 在 CGContext 中绘制透明 PNG 显示为黑色

标签 ios objective-c core-graphics

<分区>

我需要从 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/

上一篇:ios - Firebase 电话身份验证失败

下一篇:ios - NSURLSession 不返回数据

相关文章:

ios - IOS 应用内购买产品

iphone - 如何在 iPhone 操作系统中从 PNG 图像中获取干净的 Alpha channel 信息?

objective-c - 如何使用标签为动态创建的按钮动态设置背景图像?

ios - 快速检测音量变化

iphone - 监控 iPhone 应用程序中的内存使用情况?

ios - 如何发送低于参数的post请求?

core-graphics - 保留线宽,同时使用 CGAffineTransform 缩放上下文中的所有点

ios - 用核心图形画线

android - 在一个按钮中携带短信而不在Android中显示它

ios - 将方法发送到所有属性(响应它)