将具有叠加视图的图像转换为UIImage

时间:2012-05-24 08:35:54

标签: objective-c cocoa-touch uiimage save overlay

在我的应用程序中,我有一个向用户显示的图像和带有CoreGraphics自定义绘图的叠加视图。我想将覆盖在其上的图像保存到CameraRoll中。 那么我应该如何从现有的UIImage和自定义叠加视图中创建一个新的UIImage?

我尝试通过创建CGContextRef,将UIImage绘制到其中,然后将叠加视图的CALayer绘制到相同的上下文中来实现。但是我从这个上下文得到的UIImage就是白色背景上的叠加视图。它似乎没有保持透明度,只是用白色填充所有东西。

如何解决?

谢谢。

1 个答案:

答案 0 :(得分:2)

如果我理解你的问题吧。你有两个观点

  1. 向用户显示的图像(即viewA)
  2. 带有自定义绘图的叠加视图(即viewB)
  3. 如果在viewC上创建另一个视图(即viewC)addSubview viewA和viewB。

      

    [viewC addSubview:viewA]

         

    [viewC addSubview:viewB]

    现在在viewC上尝试 CGContextRef

    UIImage *outputImage = [self convertViewToImage:viewC :1];
    

    convertViewToImage方法:

    +(UIImage*)convertViewToImage:(UIView*)view:(float)ratio{
    UIGraphicsBeginImageContext(view.bounds.size);
    //UIGraphicsBeginImageContext(view.frame.size);
    
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    CGImageRef imageRef = CGImageCreateWithImageInRect([viewImage CGImage], CGRectMake(0, 0, view.bounds.size.width*ratio, view.bounds.size.height*ratio));
    UIImage *targetImage = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    
    return targetImage;
    }
    

    我相信会这样做。