Wie schneide ich ein UIImageView auf ein neues UIImage im 'Aspekt-Fit'-Modus zu?

Ich möchte ein neues UIImage erstellen, indem ich das Bild in einer UIImageView zuschneide. Im obigen Bild möchte ich beispielsweise ein neues UII-Bild des grün umrandeten Bereichs. Ich habe dazu Code gefunden, normalerweise sieht er ungefähr so ​​aus (als UIImage-Kategorie):

- (UIImage *)croppedImage:(CGRect)bounds {
    CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds);
    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    return croppedImage;
}

Macht perfekt Sinn. Mein UIImageView befindet sich jedoch im contentMode "Aspekt Fit". Scheint so, dass die CGRect-Berechnungen für CGImageCreateWithImageInRect kompliziert sind und ich nicht in der Lage war, die richtige Lösung zu finden.

Ich glaube, ich muss auf das grüne Rechteck die gleichen Transformationen anwenden, die auch auf das Bild angewendet wurden.

AUCH: Ich fand diese andere Frage hier (Wie erkennt man die Bildgröße nach dem Anwenden des für das Bild geeigneten Aspekts in einer UIImageView?), die eine brachiale Methode zu zeigen scheint, um die Größe zu bestimmen, aber ich bin mir immer noch nicht sicher, wie das in eine Situation passt, in der es um das Zuschneiden geht.

Irgendwelche Ideen?

BEARBEITEN: In meinem Fall habe ich buchstäblich ein Quadrat wie oben in einer Überlagerungsansicht über der UIImageView gezeichnet. Während ich feststelle, dass ich das UIImage zuschneide (innerhalb von UIImageView), muss ich das grüne CGRect irgendwie so ändern, dass es mit der Transformation übereinstimmt, die durchgeführt wird, wenn 'Aspektanpassung' angewendet wird. Wenn ich beispielsweise mein UIImageView im Modus "Oben links" belasse, funktioniert alles einwandfrei, da zwischen dem zugrunde liegenden UIImage und dem UIImageView eine 1: 1-Zuordnung besteht. Das Problem im Modus "Oben links" ist, dass nicht immer das gesamte Bild angezeigt wird, da es möglicherweise größer als mein UIImageView ist.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage