Selv etter bruk av alt jeg har nevnt, har jeg fortsatt hadde dramaer med bildene. Til slutt har jeg bare brukt Gimp til å lage en 'snudd vertikalt' versjon av alle mine bilder. Nå trenger jeg ikke å bruke noen Transforms. Forhåpentligvis vil dette ikke føre til ytterligere problemer nedover sporet.
Vet noen hvorfor CGContextDrawImage skulle tegne mitt bilde opp ned? Jeg legger i et bilde fra min søknad:
Quartz2d bruker et annet koordinatsystem, der opprinnelse er i nedre venstre hjørne. Da kvarts trekker piksel x [5], y [10] fra en 100 * 100 bilde, blir det bildeelement som er trukket i det nedre venstre hjørne i stedet for den øvre venstre. Dermed forårsaker 'snudd' image.
X koordinatsystem kamper, så du må snu y koordinater.
CGContextTranslateCTM(context, 0, image.size.height);
Dette betyr at vi har oversatt bildet av 0 enheter på x-aksen og av bildene høyde på y-aksen. Men dette alene vil bety vårt bilde er fortsatt opp ned, bare blir trukket "image.size.height" under der vi ønsker den skal trekkes.
Den Quartz2D programmeringsveiledning anbefaler bruk ScaleCTM og tilførsel av negative verdier for å vende bildet. Du kan bruke følgende kode for å gjøre dette -
CGContextScaleCTM(context, 1.0, -1.0);
Kombinere de to like før CGContextDrawImagesamtalen, og du bør ha bildet tegnet riktig.
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);
Bare vær forsiktig hvis imageRect koordinatene ikke stemmer overens med i bildet, som du kan få utilsiktede resultater.
For å konvertere tilbake koordinatene:
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0, -imageRect.size.height);