2012-08-06 14 views
5

In meiner App habe ich eine 'Capture from Camera' Funktion, ich benutze GPUImageFramework von Brad Larson (ty), GPUImageStillCamera beim Aufnehmen von Standbildern.Wie kann ich die Crop-Größe (rect) des UIImage mit unterschiedlicher Auflösung berechnen

stillCamera = [[GPUImageStillCamera alloc] initWithSessionPreset:AVCaptureSessionPresetPhoto cameraPosition: 
       AVCaptureDevicePositionBack]; 

wie Sie sehen können. die Session-Voreinstellung ist AVCaptureSessionPresetPhoto, die in iPhone 4 gibt mir 1529x2048 Ausgabe und mit 4s (8mp) Gerät gibt mir 2448x3264.

das Bild unten ist, wie ich die GPUStillCamera verwende. hier gibt es ein Rechteck, das in diesem Fall das getreidigte Bild des aufgenommenen Bildes ist.

Still camera output

Code-Schnipsel, wenn ich Bild aufzunehmen.

- (IBAction)takePhoto:(id)sender 
{ 
     [stillCamera capturePhotoAsJPEGProcessedUpToFilter:filter withCompletionHandler:^(NSData *processedJPEG, NSError *error){ 

     //1529x2048 when iPhone 4 and 2448x3265 when on 4s 
     UIImage *rawImage = [[UIImage alloc]initWithCGImage:[[UIImage imageWithData:processedJPEG]CGImage]scale:1.0 orientation:UIImageOrientationUp]; 

     **CGRect rect = CGRect{?,?,?,?};** 
     UIImage *imageFromRect = [rawImage imageAtRect:rect ]; 
} 

Meine Frage hier ist. Wie kann ich die Punkte (x, y, w, h) kennen, die ich an die Methode imageAtRect weitergeben kann, die ein Unterbild von der rawImage zeichnet? und wird nur den Bildteil innerhalb des Rechtecks ​​erhalten (unabhängig von der Auflösung des aufgenommenen Bildes), wie auf dem Bildschirm oben gezeigt? sollte ich es nur manuell machen oder gibt es eine mathematische Technik, die Sie vorschlagen können?

Danke!

+1

Wenn Sie GPUImage trotzdem verwenden, sehen Sie sich den GPUImageCropFilter an. Es wird unter Verwendung eines Bildkoordinatenraums mit einem Wert von 0,0 bis 1,0 beschnitten, dh unabhängig von der Bildgröße –

+0

Paul macht einen guten Punkt. Der GPUImageCropFilter verwendet ein normalisiertes Koordinatensystem, sodass er ein Rechteck abschneidet, das unabhängig von der Auflösung des Eingabebilds ist und die Auflösungsberechnung für die Ausgabe für Sie übernimmt. –

+1

Ich habe es angeschaut und ja es funktioniert wie ihr gerade hier gesagt habt :) Danke. – janusbalatbat

Antwort

0

Sie können diese Bildausschnittsklasse und Libray-Datei verwenden und Sie können die Größe und mit und Ursprungsposition der abgeschnittenen .

http://code4app.net/ios/Custom-image-cropper/51e5f03f6803fac530000000

Plus, wenn Sie es möchten, können dynamisch entsprechend der Größe des Zuschneiden Bild ändern kann. Einfach zu bedienen und zu implementieren. Bitte schauen Sie sich das Tutorial einmal an.

Verwandte Themen