BartoNaz
BartoNaz

Reputation: 2893

Convert image with overlay view into UIImage

In my app I have an Image which is shown to user and the overlay view with custom drawing by CoreGraphics. I want to save the image with overlay over it into CameraRoll. So how should I make a new UIImage from existing UIImage and custom overlay view?

I tried to do it by creating the CGContextRef, drawing the UIImage into it, and then drawing the CALayer of the overlay view into the same context. But the UIImage which I get from this context is then just the overlay view over white background. It does't seem to preserve transparency and just fills everything with white color.

How can it be fixed?

Thank you.

Upvotes: 0

Views: 1193

Answers (1)

Warif Akhand Rishi
Warif Akhand Rishi

Reputation: 24248

If I understand your question right. You have two views

  1. An Image which is shown to user (i.e. viewA)
  2. The overlay view with custom drawing (i.e. viewB)

If you create another view (i.e. viewC) addSubview viewA and viewB both on viewC.

[viewC addSubview:viewA]

[viewC addSubview:viewB]

Now try CGContextRef on viewC

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

convertViewToImage method:

+(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;
}

I believe it will do it.

Upvotes: 2

Related Questions