Même après l'application de tout ce que je l'ai mentionné, je l'ai toujours eu des drames avec les images. En fin de compte, je l'ai juste utilisé Gimp pour créer une version « verticale basculée » de toutes mes images. Maintenant, je ne ai pas besoin d'utiliser des Transforms. Espérons que cela ne causera pas d'autres problèmes sur la piste.
Est-ce que quelqu'un sait pourquoi CGContextDrawImage établiraient mon image à l'envers? Je suis le chargement d'une image de ma demande:
Quartz2d utilise un système de coordonnées différent, où l'origine est dans le coin inférieur gauche. Ainsi, lorsque des jeux Quartz pixels x [5], y [10] d'un 100 * 100 image dans ce pixel est en cours d'élaboration dans le coin inférieur gauche au lieu de la partie supérieure gauche. Provoquant ainsi l'image « basculée ».
Le système de coordonnées x correspond, de sorte que vous devrez retourner les y coordonnées.
CGContextTranslateCTM(context, 0, image.size.height);
Cela signifie que nous avons traduit l'image par 0 unités sur l'axe x et par la hauteur des images sur l'axe y. Cependant, cela ne signifie notre image est toujours à l'envers, vient d'être tirée « image.size.height » ci-dessous où l'on veut à tirer.
Le guide de programmation Quartz2D recommande d'utiliser ScaleCTM et passer des valeurs négatives pour retourner l'image. Vous pouvez utiliser le code suivant pour le faire -
CGContextScaleCTM(context, 1.0, -1.0);
Combiner les deux juste avant votre CGContextDrawImageappel et vous devriez avoir l'image dessiné correctement.
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);
Il suffit de faire attention si vos coordonnées imageRect ne correspondent pas à ceux de l'image, que vous pouvez obtenir des résultats inattendus.
Pour reconvertir les coordonnées:
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0, -imageRect.size.height);