2009-05-25 10 views

cevap

19

Bunu nerede gördüğünüz hakkında daha fazla bilgi isterdim, ancak şüphem, piksel hizalanmış olmayan bir resme gönderme yapmasıdır. Quartz, kesirli pikselleri çizmenize izin verir (CGPoint'in NSIntegers değil CGFloats aldığını hatırlayın), ancak daha pahalıdır ve biraz bulanıklık yaratma eğilimindedir. Kesirli bir piksele çekilemezsiniz, bu nedenle Kuvars bunu önlemek için anti-aliasing yapmak zorundadır. Bu zaman alır ve Çekirdek Animasyon performansını kesinlikle incitir.

Quartz, kesirli pikseller üzerinde çizim yaptığınız konusunda sizi uyarmayacak ve özellikle metin konusunda bilgi sahibi olmayacaktır. Bu nedenle, program düzenini her zaman yaptığınızda düşünmeniz gereken bir şey.

+2

Yup, yanlış hizalanmış görüntülerin anlamı budur. – Kriem

+0

İpucu için teşekkürler. Gerçekten de çerçeve kökenli koordinatlar için kayan nokta değerleri vardı. Onları bir kat() ile sildikten sonra, Instrment'teki mesaj kayboldu. Ancak herhangi bir performans gelişimini tanıyamadım. Cihazlar, UIImageView'in döndürülmesi durumunda da bundan şikayet ediyor. Yani bence çok kötü bir şey değil;) – Thanks

+0

Herhangi bir ölçekleme gerçekleştiğinde doğrudur - örneğin, bir görüntü görünümünün genişliği veya yüksekliği kaynak görüntü sınırlarıyla uyuşmuyorsa veya bir görünümün bir afine dönüşümü uygulandığında. –

2

Yanlış hizalanmış görünümler, oluşturulmadan önce oluşturucuyu kenar yumuşatmaya zorlar.

Bu bağlamda, "yanlış hizalanmış", istenen görüntüleme noktasının doğrudan bir ekran pikseliyle eşlenmediği anlamına gelir (örneğin, iki piksel arasında olabilir) ve bu nedenle iki komşu piksele ve anti-aliased'e çizilmelidir “aralarında” çizildiği yanılsamasını vermek için.

Bu hemen hemen her zaman bir görünümün karesi hesaplandığında (Interface Builder'da belirtilmek yerine) gerçekleşir çünkü bir CGRect'in X koordinatı, Y koordinatı, genişlik ve yükseklik CGFloats'tır ve bu nedenle kesirli değerlere izin verir. Örneğin, (200.5, 35.5) merkezli bir 100.8px 50.1px kutu geçerli bir çerçevedir ve işletim sistemi en iyi şekilde yönetebilmesini sağlamaya çalışacaktır. Sadece tek bir piksel için gerekli olan ek enterpolasyon ve anti-aliasing yükü eski donanımdaki performansı ciddi şekilde incitmek için yeterlidir.

İlgili konular