Ακόμα και μετά την εφαρμογή όλα όσα ανέφερα, έχω ακόμα είχε δράματα με τις εικόνες. Στο τέλος, έχω απλώς χρησιμοποιείται Gimp για τη δημιουργία ενός «γυρίσει κάθετα» έκδοση του όλες τις εικόνες μου. Τώρα δεν χρειάζεται να χρησιμοποιήσετε οποιαδήποτε Μετασχηματισμοί. Ας ελπίσουμε ότι αυτό δεν θα προκαλέσει περαιτέρω προβλήματα κάτω από το δρόμο.
Ξέρει κανείς γιατί CGContextDrawImage θα σχεδίων εικόνα μου ανάποδα; Είμαι φόρτωση μιας εικόνας από αίτησή μου:
Quartz2d χρησιμοποιεί ένα διαφορετικό σύστημα συντεταγμένων, όπου η καταγωγή είναι στην κάτω αριστερή γωνία. Έτσι, όταν Quartz εφιστά pixel x [5], y [10] ενός 100 * 100 εικόνα, ότι το εικονοστοιχείο έλκεται στην κάτω αριστερή γωνία αντί του άνω αριστερού. Έτσι, προκαλώντας την «γυρίσει» την εικόνα.
Το σύστημα x συντεταγμένη ταιριάζει, έτσι θα πρέπει να αναστρέψετε τις y συντεταγμένες.
CGContextTranslateCTM(context, 0, image.size.height);
Αυτό σημαίνει ότι έχουμε μεταφραστεί την εικόνα από το 0 μονάδες στον άξονα χ και από το ύψος εικόνες στον άξονα y. Ωστόσο, αυτό από μόνο του θα σημάνει την εικόνα μας εξακολουθεί να είναι ανάποδα, μόνο στο στάδιο της επεξεργασίας «image.size.height» κάτω από εκεί που το επιθυμούν να εξαχθούν.
Ο οδηγός προγραμματισμού Quartz2D συνιστά τη χρήση ScaleCTM και περνώντας αρνητικές τιμές για την αναστροφή της εικόνας. Μπορείτε να χρησιμοποιήσετε τον παρακάτω κώδικα για να γίνει αυτό -
CGContextScaleCTM(context, 1.0, -1.0);
Συνδυάστε τα δύο λίγο πριν σας CGContextDrawImageκλήση και θα πρέπει να έχετε την εικόνα που σωστά.
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);
Απλά να είστε προσεκτικοί αν imageRect συντεταγμένες σας δεν ταιριάζουν με εκείνα της εικόνας σας, όπως μπορείτε να πάρετε ακούσια αποτελέσματα.
Για να μετατρέψετε πίσω τις συντεταγμένες:
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0, -imageRect.size.height);