2009-08-23 5 views
3

Ich möchte das Bild, das auf dem UIImagePickerController angezeigt wird, wenn Benutzer die Kamera verwendet. Und wenn ich komme, möchte ich das Bild und die Anzeige anstelle der normalen Kameraansicht verarbeiten.iPhone: Kameravorschau anzeigen

Aber das Problem ist, wenn ich die Kamera sehen will, ist das Bild nur ein schwarzes Rechteck.

Hier ist mein Code:

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 

Was mache ich falsch?

Danke.

Antwort

7

Dieser funktioniert auch ganz gut. Verwenden Sie es, wenn die Kamera Vorschau geöffnet ist:

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

Aber soweit ich herausfand, bringt es die gleichen Ergebnisse als die folgende Lösung, die einen ‚Screenshot‘ des aktuellen Bildschirms nimmt:

extern CGImageRef UIGetScreenImage(); 

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

Ein Problem, für das ich noch keine Lösung gefunden habe, ist, wie man das Kamerabild ohne Overlays sehr schnell bekommt.

+1

: Ich benutze deinen Code aber immer noch habe ich die Kamera Vorschau als schwarz – Seeker

0

zumindest für jetzt, es gibt keine Möglichkeit, dies zu tun. (sicherlich kein offiziell dokumentierter Weg, und soweit ich weiß, hat auch niemand einen inoffiziellen Weg gefunden.)

Die Kamera-Vorschaudaten werden vom Betriebssystem in irgendeiner Weise gezeichnet, die die normalen Grafikmethoden umgeht.

1

Der inoffizielle Anruf:

UIGetScreenImage() 

, die Sie über dem @implementation erklären wie:

extern CGImageRef UIGetScreenImage(); 

Es kann eine dokumentierte Möglichkeit, dies in 3.1 zu tun, aber ich bin nicht sicher, . Wenn nicht, bitte füge bitte einen Radar mit Apple ein, der sie bittet, eine Art Bildschirmzupackenzugang öffentlich zu machen !!!

Mit Ihrer gleichen AppleID melden Sie sich mit dem iPhone Entwicklungsportal an.

Update: Dieser Anruf ist noch nicht dokumentiert, aber Apple hat ausdrücklich das OK gegeben, es mit App Store Apps zu verwenden.

+0

Wie verwenden Sie UIGetScreenImage? in einem Thread? –

+0

Ich glaube nicht, dass Sie es aus einem Thread verwenden können, ich habe es nur aufgerufen, wenn ich den Bildschirminhalt abrufen wollte - Sie können das erzeugte Bild aufnehmen und es zur Verarbeitung an einen Hintergrundthread senden. –