UIImageView: gedreht und skaliert. Wie kann ich die Ergebnisse speichern?
Frage
Ich versuche, eine gedreht und skaliert UIImageView als UIImage in der Position und mit der Zoom-Skala zu speichern, die der Benutzer zu bearbeiten. Aber ich kann nur verwalten das Originalbild zu speichern, wie es vor der Bearbeitung war. Wie kann ich das Bild speichern, wie es in der UIImageView mit der gleichen Skalierung und Drehung gezeigt wird? Ich habe gelesen, dass ich brauche UIGraphicsGetCurrentContext () verwenden, aber ich habe das gleiche Originalbild gespeichert (aber umgedreht) und nicht gedreht einen !! Anregungen und Hinweise wäre wirklich hilfreich sein. Vielen Dank im Voraus. Al
(UIImage *)getImage
{
CGSize size = CGSizeMake(250, 250);
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGMutablePathRef path = CGPathCreateMutable();
// Add circle to path
CGPathAddEllipseInRect(path, NULL, CGRectMake(0, 0, 250, 250));
CGContextAddPath(context, path);
// ****************** touchImageView is my UIImageView ****************//
CGContextDrawImage(context, CGRectMake(0, 0, 250, 250), [touchImageView image].CGImage);
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
// Clip to the circle and draw the logo
CGContextClip(context);
UIGraphicsEndImageContext();
return scaledImage;
}
Lösung
Ich sehe nichts im Code geschrieben, dass ein Bild drehen würde. Haben Sie vergessen, dass hinzufügen?
Es sieht aus wie Sie auf dem richtigen Weg sind. Nun sollten Sie die Transformationsroutinen CGContextScaleCTM
und CGContextRotateCTM
verwenden, um Ihre Matrix entsprechend umwandeln zu ändern, und dann (um das Umklappen zu vermeiden), verwendet -[UIImage drawAtPoint:]
, um die UIImage zu ziehen statt CGContextDrawImage
zu verwenden.
Andere Tipps
Die Ansicht basierte Transformationen werden die Ausgabe des Kontextes angewandt nicht der Kontext selbst. Ich glaube, Sie haben zu skalieren und drehen Sie das Bild Kontext sich die link text spezifischen Funktionen des Kern Grafik.
(ich könnte falsch sein. Ich kann mich nicht erinnern, wie genau, wie ich das tat im past.Take diese mit einem Körnchen Salz.)