2012-05-24 81 views
0

在我的應用程序,我有一個圖像顯示給用戶和覆蓋視圖與自定義繪圖由CoreGraphics。我想將覆蓋它的圖像保存到CameraRoll中。 那麼我應該如何從現有的UIImage和自定義疊加視圖中創建一個新的UIImage?轉換圖像覆蓋視圖到UIImage

我試圖通過創建CGContextRef,將UIImage繪製到其中,然後將覆蓋視圖的CALayer繪製到相同的上下文中來完成此操作。但是我從這個上下文中獲得的UIImage只是在白色背景下的覆蓋視圖。它似乎不能保持透明度,只是用白色填充所有東西。

如何解決?

謝謝。

回答

2

如果我理解你的問題的權利。你有兩種觀點

  1. 其顯示到用戶的圖像(即viewA)
  2. 與自定義繪製(即viewB)疊加視圖

如果你創建另一個視圖(即viewC)addSubview viewA上的viewA和viewB。

[viewC addSubview:viewA]

[viewC addSubview:viewB]

現在嘗試CGContextRef上viewC

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

我相信它會做到這一點。

+0

哦。那很棒。我沒有實施整個方法。我只是將'[layer drawInContext:ctx]'改爲'[render renderInContext]',現在覆蓋圖被正確地繪製在圖像上。因此,我創建了CGContextRef ctx,然後'[image drawInRect:CGRectmake(0.f,0.f,image.size.width,image.size.height)]',然後'[overlayView.layer renderInContext:ctx]'。非常感謝。 – BartoNaz

+0

:-)樂於幫助。 –