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.
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!
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 –
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. –
Ich habe es angeschaut und ja es funktioniert wie ihr gerade hier gesagt habt :) Danke. – janusbalatbat