SORU
3 ŞUBAT 2009, Salı


CGContextDrawİmage Uİİmage geçtiğinde görüntü baş aşağı çekiyor.CGİmage

Herkes CGContextDrawImage ters görüntü aşağı çizim neden biliyor mu? Resim benim uygulama yükleme yapıyorum:

UIImage *image = [UIImage imageNamed:@"testImage.png"];

Ve sonra sadece çekirdek benim ekran içeriği çizmek için soruyorum:

CGContextDrawImage(context, CGRectMake(0, 0, 145, 15), image.CGImage);

Doğru yerde işler ve boyutları, ama görüntü tersine döndü. Burada bir şey çok açık kaçırıyor olmalıyım?

CEVAP
4 ŞUBAT 2009, ÇARŞAMBA


Hatta bahsettiğim her şeyi uyguladıktan sonra, hala görüntüleri ile dramalar vardı. Sonunda, sadece Topal bir 'dikey saygısız' sürüm tüm görüntüleri. oluşturmak için kullandım Şimdi herhangi bir Dönüşümler kullanmaya ihtiyacım yok. Umarım bu parça aşağı daha fazla sorun neden olmaz.

Nedenini bilen var mı CGContextDrawİmage benim çizim olurdu görüntü baş aşağı? Bir yükleme yapıyorum görüntü uygulama:

Quartz2d kökeni sol alt köşesinde bulunduğu koordine farklı bir sistem kullanır. Kuvars piksel x[5], y[10] 100 * 100 bir resim çizer, bir piksel sol üst yerine sol alt köşesine çekiliyor. Böylece neden 'saygısız' görüntü.

X koordinat sistemi maçlarında, y koordinatları çevirmek gerekir.

CGContextTranslateCTM(context, 0, image.size.height);

Bu y ekseni üzerinde resim yüksekliği x ekseni üzerinde 0 birim tarafından ve resmi tercüme ettik. Ancak, bunu tek başına bizim görüntü hala baş aşağı, sadece "görüntü.çekilmesi anlamına gelecektir boyutu.yükseklik çizilmiş olması dileğiyle" aşağıda.

Quartz2D programlama kılavuzu ScaleCTM kullanma ve resmi döndürmek için negatif değerler geçen önerir. Aşağıdaki kod bunu yapmak için kullanabilirsiniz

CGContextScaleCTM(context, 1.0, -1.0);

Sadece CGContextDrawImage aramadan önce iki birleştirmek ve görüntü doğru çizilmiş olması gerekir.

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);

Sadece imageRect dikkatli olun koordinatları istenmeyen sonuçlar elde edebilirsiniz görüntüye uyacak.

Convert geri koordinatları:

CGContextScaleCTM(ctx, 1.0, -1.0);
CGContextTranslateCTM(ctx, 0, -imageRect.size.height);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • A Alkhaldi

    A Alkhaldi

    12 Mayıs 2007
  • Charles Nesson

    Charles Ness

    27 NİSAN 2006
  • Liz Morgan

    Liz Morgan

    4 Aralık 2011