Még alkalmazása után mindaz, amit említettem, én már mindig volt drámák a képeket. A végén, én már csak használt Gimp hogy hozzon létre egy „tükrözött vertikális” változata az összes képeim. Most már nem kell használni minden átváltozik. Remélhetőleg ez nem okoz további problémákat le a pályán.
Tudja valaki, hogy miért CGContextDrawImage lenne felhívta a képet fejjel lefelé? Én betöltése egy képet az én alkalmazás:
Quartz2d használ egy másik koordináta-rendszerben, ahol az eredet, a bal alsó sarokban. Tehát amikor Kvarc felhívja pixel x [5], Y [10] egy 100 * 100 kép, hogy a pixel van húzva a bal alsó sarokban helyett a bal felső. Így okozva a „tükrözött” képet.
Az x koordináta-rendszere illeszkedik, így szükség lesz a flip y koordinátáit.
CGContextTranslateCTM(context, 0, image.size.height);
Ez azt jelenti, hogy lefordította a képet 0 egység az x tengelyen, valamint a képek magassága az y tengelyen. Azonban ez önmagában azt jelenti, mi kép még mindig fejjel lefelé, éppen most húzott „image.size.height” alul, ahol szeretnénk, hogy kell elkészíteni.
A Quartz2D programozási útmutató javasolja ScaleCTM és halad a negatív értékek tükrözik a képet. Használhatja az alábbi kódot, hogy ezt -
CGContextScaleCTM(context, 1.0, -1.0);
Keverjük össze a két, mielőtt a CGContextDrawImagehívást, és akkor a kép készült helyesen.
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);
Csak vigyázz, ha a imageRect koordinátáit nem egyeznek meg a kép, ahogy tud kívánt eredményeket.
Átalakítani vissza a koordinátákat:
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0, -imageRect.size.height);