2014-01-31 3 views
5

Ich möchte Bilder mit einer Auflösung von 5 MP in einem iOS-Gerät aufnehmen, wo die maximale Bildsensorauflösung 8 MP beträgt.Wie 5MP-Bild in iPhone-Geräten mit 8MP-Kamera zu erfassen?

Die mitgelieferten Presets in Avfoundations AVCaptureSessionPresetPhoto gibt - 3264x2448 - 8 MP Auflösung VCaptureSessionPresetHigh gibt - 1920x1080 - 2 MP Auflösung

Gibt es eine Möglichkeit/Abhilfe für direkt 5MP Erfassung, statt 8MP erfassen und Downscaling dann?

Antwort

2

iOS gibt sehr begrenzte Ausgabeauflösungen von Kamera.

Sie erwähnten richtig, dass die größte Größe 8MP ist und die nächste Voreinstellung auf 1080p oder ~ 2MP herunter geht. Es wird erwartet, dass das Bild je nach Anwendung verkleinert/verkleinert wird. Das SDK bietet jedoch keine einzige API, um die erforderliche Auflösung oder das gewünschte Ausgabebild zu erhalten.

Hoffe, das hilft.

2

AVCaptureSessionPreset gibt nur Konstantenauflösungen (Sie können API-Referenzen sehen). Wenn Sie in benutzerdefinierter Auflösung speichern Bild mögen, können Sie hier finden Save image with custom resolution

+0

Ihre Lösung ist sehr hilfreich. Es ist nützlich, UIImage auf dem Bildschirm mit benutzerdefinierter Auflösung zu erhalten. Ich versuche, das Bild im YUV420SP-Format zu erfassen. Gibt es eine Möglichkeit, YUV420 mit einer benutzerdefinierten Auflösung zu erfassen? –

+0

Wenn ich richtig unterstoppe, ändern wir in der von Ihnen angegebenen Lösung die Größe von UIImage mithilfe von Core-Grafik-APIs, um eine benutzerdefinierte Auflösung zu erhalten. Korrigiere mich, wenn mein Verständnis falsch ist. –

1

, warum Sie nicht Bild mit 8MP Kamera erfassen und dann vor dem Speichern Bild seine Größe WRT 5MP Auflösung Verfahren folgende Verwendung ändern

+ (UIImage*)imageWithImage:(UIImage*)image 
      scaledToSize:(CGSize)newSize 
{ 
UIGraphicsBeginImageContext(newSize); 
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; 
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return newImage; 
} 

Rufen Sie die obige Methode in imagePickerDidFinishMediaWithInfoMethod auf, bevor Sie das erfasste Bild speichern. Die obige Methode gibt Ihnen ein Uiimage mit geänderter Größe zurück (das Sie als CGSize angeben müssen).

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    UIImage * tempImage =[info objectForKey:UIImagePickerControllerOriginalImage]; 
    CGSize mSize; 
    mSize  = CGSizeMake(your width and height as per 5MP mode); 
    tempImage = [ViewController imageWithImage:tempImage scaledToSize:mSize]; 
    // use this temp img as it would be in dimensions of 5MP image. 
} 
+0

Danke @Rana. Ihre Antwort ist hilfreich. Aber ich versuche, die Größenänderung zu vermeiden. Und ich suche auch, YUV/RGB Puffer direkt zu erhalten, wenn möglich ohne Verarbeitung. –

Verwandte Themen