Auch nach allem, was der Anwendung ich erwähnt habe, habe ich hatte noch Dramen mit den Bildern. Am Ende habe ich Gimp nur verwendet, um eine ‚blätterte vertikale‘ Version all meine Bilder zu erstellen. Jetzt brauche ich keine Transformationen zu verwenden. Hoffentlich wird dies nicht dazu führen, weitere Probleme auf der Spur.
Weiß jemand, warum würde CGContextDrawImage mein Bild zeichnen den Kopf? Ich lade Sie ein Bild in meiner Anwendung:
Quartz2d verwendet ein anderes Koordinatensystem, wobei der Ursprung in der linken unteren Ecke befindet. Wenn also Quartz zeichnet Pixel x [5], y [10] von einem 100 * 100 Bild, wird das Pixel in der linken unteren Ecke gezogen wird anstelle der oben links. So verursacht das ‚gekippt‘ Bild.
Das x-Koordinatensystem übereinstimmt, so dass Sie die y-Koordinaten drehen müssen.
CGContextTranslateCTM(context, 0, image.size.height);
Dies bedeutet, dass wir das Bild von 0 Einheiten auf der x-Achse und durch die Bilder Höhe auf der y-Achse übersetzt haben. Dies wird jedoch allein unser Bild bedeutet noch den Kopf, gerade gezogen wird „image.size.height“ weiter unten, wo wir es wollen gezogen werden.
Die Quartz2D Programmieranleitung empfiehlt die Verwendung von ScaleCTM und Leiten negative Werte um das Bild zu drehen. Sie können den folgenden Code verwenden, dies zu tun -
CGContextScaleCTM(context, 1.0, -1.0);
Kombinieren Sie die beiden kurz vor Ihrem CGContextDrawImageAnruf , und Sie sollten das Bild korrekt gezeichnet haben.
UIImage *image = [UIImage imageNamed:@"testImage.png"];
CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
CGContextTranslateCTM(context, 0, image.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, imageRect, image.CGImage);
Nur vorsichtig sein, wenn Ihr imageRect Koordinaten nicht mit denen dem Bild entspricht, wie Sie unbeabsichtigte Ergebnisse bekommen.
Zur Umrechnung der Koordinaten zurück:
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0, -imageRect.size.height);