0

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

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

如何修复?

谢谢你。

4

1 回答 1

2

如果我理解你的问题是正确的。你有两种观点

  1. 向用户显示的图像(即 viewA)
  2. 带有自定义绘图的覆盖视图(即 viewB)

如果您在 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;
}

我相信它会做到的。

于 2012-05-24T09:12:50.763 回答