Wie schneidet man einen UIImageView auf einen neuen UIImage im 'Aspect Fit'-Modus?

8

Ich möchte ein neues UII-Bild erstellen, indem ich das Bild in einem UIImageView zuschneide. Im obigen Bild möchte ich zum Beispiel ein neues Bild des Bereichs, der grün umrandet ist. Ich habe dafür Code gefunden, der normalerweise so aussieht (als UIImage-Kategorie):

%Vor%

Macht Sinn. JEDOCH ist meine UIImageView in contentMode 'aspect fit'. Scheint so, dass die CGRect-Berechnungen für CGImageCreateWithImageInRect komplizierter werden und ich nicht in der Lage war, die richtige Lösung zu finden.

Ich denke, ich muss die gleichen Transformationen auf das grüne Rechteck anwenden, wie es mit dem Bild gemacht wurde?

AUCH: Ich habe diese andere Frage hier gefunden ( Wie erkenne ich die Bildgröße nach dem Anwenden von Aspekt für das Bild in einer UIImageView ), die eine brutale Art und Weise zu bekommen scheint, die Größe zu bekommen, aber ich bin immer noch nicht sicher, wie das in eine Cropping-Situation passt.

Irgendwelche Ideen?

BEARBEITEN : In meinem Fall habe ich buchstäblich ein Quadrat, wie oben in einer Überlagerungsansicht über die UIImageView gezeichnet. Also, während ich merke, dass ich die UIImage beschneide (innerhalb der UIImageView), muss ich irgendwie das grüne CGRect so ändern, dass es der Transformation entspricht, die ausgeführt wird, wenn "Aspect Fit" angewendet wird. Zum Beispiel, wenn ich meine UIImageView im Modus 'oben links' belasse, dann funktioniert alles gut, weil es eine 1: 1 Zuordnung zwischen dem zugrundeliegenden UIImage und dem UIImageView gibt. Das Problem im Modus "oben links" ist, dass das gesamte Bild nicht immer angezeigt wird, weil es möglicherweise größer als mein UIImageView ist.

    
pj4533 02.06.2012, 04:11
quelle

4 Antworten

10

Basierend auf meiner anderen Antwort auf eine ähnliche Frage habe ich diese Methode für eine UIImageView-Kategorie geschrieben:

%Vor%

Sie können den Rahmen Ihres grünen Rechtecks ​​übergeben (vorausgesetzt, es handelt sich um eine Unteransicht der Bildansicht) und die Bildbeschneidung zurückholen, um das Bild zu beschneiden. Beachten Sie, dass dies nur für den "Aspect Fit" -Modus funktioniert! Ich habe es aber nicht getestet. Also, sag mir, ob es funktioniert!

    
Felix 02.06.2012, 20:07
quelle
4

Ich weiß, dass die Antwort war, aber ich hatte einige Probleme, oben rechts zu kommen, also werde ich auch meine Lösung nicht veröffentlichen.

Das Problem ist, dass das Bild mit einer Seitenanpassung skaliert wird, aber wir kennen den Skalierungsfaktor sowohl für die Breite als auch für die Höhe. Dann können wir das rechte Beschneidungsrechteck ziemlich einfach berechnen:

%Vor%     
DNRN 28.08.2012 15:20
quelle
1

Ich denke, du verstehst nicht, was du tust. Sie können eine UIImageView nicht "zuschneiden" - nur UIImages. Daher sollte Ihre croppedImage-Methode in einer UIImage-Kategorie und nicht in einer UIImageView-Kategorie enthalten sein. Die Schranken, die Sie an die Crop-Methode übergeben, müssen sich auf die Bildgröße und nicht auf die Grenzen der Bildansicht beziehen. Es ist unerheblich, was der contentMode der Bildansicht ist - das Zuschneiden des Bildes funktioniert immer gleich. Erhalte zuerst das Bild aus der Bildansicht. Erstellen Sie dann ein neues zugeschnittenes Bild und stellen Sie schließlich das zugeschnittene Bild für die Bildansicht ein. Dies kann in einer Codezeile erfolgen:

%Vor%

Da Ihr contentMode "aspect fit" ist, wird das neue Bild automatisch so gestreckt, dass es in den Ansichtsrahmen passt. Sie können auch versuchen, den Ansichtsrahmen basierend auf image.size zu ändern, um Pixeleffekte zu vermeiden.

    
Felix 02.06.2012 10:09
quelle
0

Ich verwende die folgende Methode.

%Vor%     
user5176302 29.01.2016 12:58
quelle

Tags und Links