2009-08-23 4 views
3

사용자가 카메라를 사용할 때 UIImagePickerController에 표시되는 이미지를 얻고 싶습니다. 그리고 내가 얻을 때 일반 카메라보기 대신 이미지와 디스플레이를 처리하려고합니다.iPhone : 카메라 미리보기 받기

하지만 문제는 카메라보기를 가져오고 싶을 때 이미지가 검은 색 직사각형에 불과하다는 것입니다.

UIView *cameraView = [[[[[[imagePicker.view subviews] objectAtIndex:0] 
         subviews] objectAtIndex: 0] 
         subviews] objectAtIndex: 0]; 

UIGraphicsBeginImageContext(CGSizeMake(320, 427)); 
[cameraView.layer renderInContext: UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

imageToDisplay.image = [PixelProcessing processImage: viewImage]; //In this case the image is black 
//imageToDisplay.image = viewImage; //In this case the image is black too 
//imageToDisplay.image = [UIImage imageNamed: @"icon.png"];  //In this case image is being displayed properly 

내가 잘못 뭐하는 거지 :

여기 내 코드입니까?

감사합니다.

답변

7

이 또한 매우 효과적입니다.

UIImage *viewImage = [[(id)objc_getClass("PLCameraController") 
         performSelector:@selector(sharedInstance)] 
         performSelector:@selector(_createPreviewImage)]; 

그러나 지금까지 내가 발견으로 현재 화면의 '스크린 샷'걸리는 다음과 같은 솔루션보다 같은 결과 제공 :

extern CGImageRef UIGetScreenImage(); 

CGImageRef cgoriginal = UIGetScreenImage(); 
CGImageRef cgimg = CGImageCreateWithImageInRect(cgoriginal, rect);    
UIImage *viewImage = [UIImage imageWithCGImage:cgimg];  
CGImageRelease(cgoriginal);     
CGImageRelease(cgimg); 

을 카메라 미리보기가 열려있을 때 그것을 사용 내가 아직 해결 방법을 찾지 못했던 문제는 오버레이없이 카메라 이미지를 매우 빠르게 얻을 수 있다는 것입니다.

+1

: 코드를 사용하지만 여전히 카메라 미리보기가 검정색으로 표시됩니다. – Seeker

0

적어도 지금은이를 수행 할 방법이 없습니다. (공식적으로 문서화 된 방식은 아니며, 아무도 비공식적 인 방법을 찾아 내지 못한다는 것을 알고있다.)

카메라 미리보기 데이터는 일반적인 그래픽 방식을 우회하는 방법으로 OS에 의해 그려진다.

1

비공식 호출은 다음과 같습니다 당신과 @implementation 위에 선언

UIGetScreenImage() 

:

extern CGImageRef UIGetScreenImage(); 

가 3.1에서이 작업을 수행 할 수있는 문서화 된 방법이 될,하지만 난 모르겠어요 수 있습니다 . 그렇지 않다면 애플과 Radar을 파일로 보내 주시기 바랍니다.

iPhone 개발 포털에 로그인 할 때 사용하는 것과 동일한 AppleID를 사용합니다.

업데이트 :이 호출은 아직 문서화되어 있지 않지만 Apple이 App Store 응용 프로그램에서이 호출을 사용하도록 명시 적으로 명시했습니다.

+0

어떻게 UIGetScreenImage를 사용하고 있습니까? 실에서? –

+0

스레드에서 사용할 수 없다고 생각합니다. 화면 내용을 가져오고 싶을 때마다 호출했습니다. 이미지를 가져 와서 처리를 위해 백그라운드 스레드로 보낼 수 있습니다. –