Bahkan setelah menerapkan semua yang saya sebutkan, saya masih punya drama dengan gambar. Pada akhirnya, saya baru saja menggunakan Gimp untuk membuat versi 'flipped vertical' dari semua gambar saya. Sekarang saya tidak perlu menggunakan Transforms. Semoga ini tidak akan menyebabkan masalah lebih lanjut di trek.
Adakah yang tahu mengapa CGContextDrawImage akan membuat gambar saya terbalik? Saya memuat gambar dari aplikasi saya:
Quartz2d menggunakan sistem koordinat yang berbeda, di mana asalnya berada di sudut kiri bawah. Jadi, ketika Kuarsa menarik piksel x [5], y [10] dari gambar 100 * 100, piksel itu sedang digambar di sudut kiri bawah, bukan di kiri atas. Sehingga menyebabkan gambar 'terbalik'.
Sistem x koordinat cocok, jadi Anda perlu membalikkan koordinat y.
CGContextTranslateCTM(context, 0, image.size.height);
Ini berarti kami telah menerjemahkan gambar dengan 0 unit pada sumbu x dan oleh tinggi gambar pada sumbu y. Namun, ini saja akan berarti gambar kita masih terbalik, hanya ditarik "image.size.height" di bawah di mana kita ingin gambar itu diambil.
Panduan pemrograman Quartz2D merekomendasikan penggunaan ScaleCTM dan memberikan nilai negatif untuk membalik gambar. Anda dapat menggunakan kode berikut untuk melakukan ini -
CGContextScaleCTM(context, 1.0, -1.0);
Kombinasikan keduanya tepat sebelum CGContextDrawImage
panggilan Anda dan Anda harus memiliki gambar yang digambar dengan benar.
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);
Berhati-hatilah jika koordinat imageRect Anda tidak cocok dengan gambar Anda, karena Anda bisa mendapatkan hasil yang tidak diinginkan.
Untuk mengonversi kembali koordinat:
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0, -imageRect.size.height);