2012-05-24 3 views
0

내 응용 프로그램에는 사용자에게 표시되는 이미지와 CoreGraphics의 사용자 지정 드로잉이있는 오버레이 뷰가 있습니다. 오버레이로 이미지를 CameraRoll에 저장하고 싶습니다. 그래서 기존 UIImage 및 사용자 정의 오버레이 뷰에서 새로운 UIImage를 작성해야합니까?오버레이보기가있는 이미지를 UIImage로 변환

CGContextRef를 만들고, UIImage를 드로잉 한 다음 오버레이 뷰의 CALayer를 같은 컨텍스트로 그려서 작업하려고했습니다. 하지만이 컨텍스트에서 얻은 UIImage는 흰색 배경 위에 오버레이 뷰일뿐입니다. 투명도를 유지하지 못하고 모든 것을 흰색으로 채 웁니다.

어떻게 고칠 수 있습니까?

감사합니다.

답변

2

나는 당신의 질문을 이해합니다. 당신은 두 가지보기

  1. 사용자에게 표시되는 이미지 (즉 viewA) (즉, viewB)를 그리기 정의와
  2. 오버레이 뷰를
  3. 다른 뷰를 작성하는 경우

(즉 viewC)이 addSubview viewA 및 viewB 모두 viewC에 있습니다.

[viewC addSubview : viewA]

[viewC addSubview : viewB]

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

지금

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

viewC

에 convertViewToImage 방법 CGContextRef 시도

나는 그것이 그것을 할 것이라고 믿습니다.

+0

오. 훌륭합니다. 나는 전체적인 방법을 구현하지 않았다. 나는 이제'[layer drawInContext : ctx]'를'[layer renderInContext]'로 바 꾸었습니다. 이제 오버레이가 이미지 위에 올바르게 그려집니다. 그래서 CGContextRef ctx를 생성 한 다음'[image drawInRect : CGRectmake (0.f, 0.f, image.size.width, image.size.height)]''그런 다음'[overlayView.layer renderInContext : ctx]'를 작성합니다. 고마워. – BartoNaz

+0

:-) 기꺼이 도와 드리겠습니다. –

관련 문제