Chiar și după aplicarea tot ce am menționat, am avut încă drame cu imaginile. În cele din urmă, am folosit doar Gimp pentru a crea o versiune „oglindită pe verticală“ a tuturor imaginilor mele. Acum, nu am nevoie de a utiliza orice Transformări. Să sperăm că acest lucru nu va cauza probleme în continuare în jos pe pista.
Stie cineva de ce CGContextDrawImage ar fi imaginea mea de desen cu susul în jos? Sunt de încărcare o imagine de pe cererea mea:
Quartz2d utilizează un alt sistem de coordonate, în cazul în care originea este în colțul din stânga jos. Deci, atunci când cuarț trage pixeli x [5], y [10] a unei imagini de 100 * 100, care pixel este tras în colțul din stânga jos în loc de stânga sus. Astfel, provocând imaginea „oglindită“.
Sistemul de coordonate x meciuri, astfel încât va trebui să flip coordonatele y.
CGContextTranslateCTM(context, 0, image.size.height);
Acest lucru înseamnă că am tradus imaginea de 0 unități pe axa x și de înălțimea imaginilor de pe axa y. Cu toate acestea, numai acest lucru va însemna imaginea noastră este încă cu susul în jos, doar a fi tras „image.size.height“ de mai jos în cazul în care am dori să fie trase.
Ghidul de programare Quartz2D recomandă utilizarea ScaleCTM și trece valori negative pentru a răsturna imaginea. Puteți folosi următorul cod pentru a face acest lucru -
CGContextScaleCTM(context, 1.0, -1.0);
Se combină cele două chiar înainte de dvs. de CGContextDrawImageapel și ar trebui să aveți imaginea desenat corect.
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);
Doar fii atent dacă imageRect coordonatelor tale nu se potrivesc cu cele ale imaginii, după cum puteți obține rezultate nedorite.
Pentru a converti înapoi coordonatele:
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0, -imageRect.size.height);