iPhone: Obter visualização da câmera

votos
3

Eu gostaria de obter a imagem que está sendo exibida no UIImagePickerController quando o usuário usa a câmera. E quando eu chegar eu quero processar a imagem e exibir em vez de vista regulares câmera.

Mas o problema é quando eu quero começar a visão da câmera, a imagem é apenas um retângulo preto.

Aqui está o meu código:

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

O que estou fazendo de errado?

Obrigado.

Publicado 23/08/2009 em 08:18
fonte usuário
Em outras línguas...                            


3 respostas

votos
7

Este também está trabalhando muito bom. Use-o quando a visualização da câmera é aberto:

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

Mas, tanto quanto eu descobri que traz os mesmos resultados do que a solução seguinte que leva a 'imagem' da tela atual:

extern CGImageRef UIGetScreenImage();

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

Um problema que eu não ainda encontrar uma solução para é, como se pode obter a imagem câmera muito rápido, sem quaisquer sobreposições?

Respondeu 07/10/2009 em 17:09
fonte usuário

votos
1

A chamada não-oficial é:

UIGetScreenImage()

que você declarar acima da @implementation como:

extern CGImageRef UIGetScreenImage();

Pode haver uma maneira documentada para fazer isso no 3.1, mas eu não tenho certeza. Se não, por favor preencha um radar com a Apple pedindo-lhes para fazer algum tipo de ecrã público acesso grab !!!

Que usa sua mesma ID da Apple que você efetuar logon no portal de desenvolvimento do iPhone com.

Update: Esta chamada ainda não está documentada, mas a Apple explicitamente deu o OK para usá-lo com aplicativos da App Store.

Respondeu 24/08/2009 em 04:38
fonte usuário

votos
0

pelo menos por agora, não há nenhuma maneira de fazer isso. (Certamente nenhum funcionário documentado forma, e, tanto quanto eu sei ninguém descobriu uma maneira não-oficial também.)

os dados de visualização da câmera está sendo desenhado pelo sistema operacional, de alguma forma que ultrapassa os métodos gráficos normais.

Respondeu 23/08/2009 em 16:07
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more