0

私のアプリには、ユーザーに表示される画像と、CoreGraphicsによるカスタム描画を使用したオーバーレイビューがあります。オーバーレイした画像をCameraRollに保存したいと思います。では、既存のUIImageとカスタムオーバーレイビューから新しいUIImageを作成するにはどうすればよいですか?

CGContextRefを作成し、それにUIImageを描画してから、オーバーレイビューのCALayerを同じコンテキストに描画することでそれを実行しようとしました。しかし、このコンテキストから取得したUIImageは、白い背景のオーバーレイビューにすぎません。透明度を維持していないようで、すべてを白い色で塗りつぶします。

どうすれば修正できますか?

ありがとうございました。

4

1 に答える 1

2

私があなたの質問を正しく理解していれば。2つのビューがあります

  1. ユーザーに表示される画像(つまりviewA)
  2. カスタム描画を使用したオーバーレイビュー(つまり、viewB)

別のビュー(つまりviewC)を作成する場合は、viewCでaddSubviewviewAと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 に答える