Bahsettiğim her şeyi uyguladıktan sonra bile, hala görüntülerle dramlarım oldu. Sonunda, tüm görüntülerimin 'çevrilmiş dikey' bir versiyonunu oluşturmak için Gimp'i kullandım. Şimdi herhangi bir Dönüşüm kullanmama gerek yok. Umarım bu pistte başka sorunlara neden olmaz.
CGContextDrawImage resmimi neden baş aşağı çekeceğini bilen var mı? Uygulamamdan bir resim yüklüyorum:
Quartz2d, kaynağın sol alt köşede olduğu farklı bir koordinat sistemi kullanır. Kuvars 100 * 100 görüntünün piksel x [5], y [10] 'u çizdiğinde, bu piksel sol üst köşeye değil sol alt köşeye çizilir. Böylece 'çevrilmiş' görüntüye neden olur.
X koordinatı sistemi eşleşir, bu nedenle y koordinatlarını çevirmeniz gerekir.
CGContextTranslateCTM(context, 0, image.size.height);
Bu, görüntüyü x ekseninde 0 birim ve y eksenindeki görüntü yüksekliği ile çevirdiğimiz anlamına gelir. Bununla birlikte, bu tek başına imajımızın hala baş aşağı olduğu, sadece çizilmesini istediğimiz yere "image.size.height" çizildiği anlamına gelecektir.
Quartz2D programlama kılavuzu, ScaleCTM kullanılmasını ve görüntüyü döndürmek için negatif değerler aktarılmasını önerir. Bunu yapmak için aşağıdaki kodu kullanabilirsiniz -
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage
Aramanızdan hemen önce ikisini birleştirin ve görüntüyü doğru şekilde çizmelisiniz.
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);
İstenmeyen sonuçlar alabileceğiniz için imageRect koordinatlarınız görüntünüzdekilerle eşleşmiyorsa dikkatli olun.
Koordinatları geri dönüştürmek için:
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0, -imageRect.size.height);