2012-09-21 16 views
6

Şu anda benim canvas düğüm için GraphicsContext kapma ve birkaç düzine yöntemleri kullanılabilir olması benim canvas OnJavaFX 2 Canvas düğümüne nasıl yakınlaştırıyorsunuz?

gc.scale(2, 2); 

çalışıyorum. Bu yüzden yakınlaştırmak için bir şey olması gerektiğini biliyorum. Ancak benim girişimde bariz "büyüyen" veya "yakınlaştırma" üretmiyor. Bunun uygulanmasını veya yeniden çizilmesini sağlamak için aramam gereken bir şey var mı?

cevap

5

gc.scale(2,2), tuval üzerinde çizdiğiniz sonraki öğeleri, önceden çizdiğiniz mevcut olmayan 2 faktöre göre ölçekleyecektir.

Tuvali ölçeklemek isterseniz, grafik bağlamında değil, tuval üzerinde bir dönüşüm ayarlayabilirsiniz.

canvas.setScaleX(2); 
canvas.setScaleY(2); 

sen ölçekli tuval düzeni yöneticileri için düzen hesaplamalarına yansıtılması o zaman bir Grubunda sarın ve yakınlaştırmak benzeri için ölçekli tuval üzerine etkisini istiyorsanız tuvalin parçaları nerede kesileceğini istiyorsanız daha sonra, tuvali ScrollPane içine yerleştirebilir ve ona bir görünüm noktası tanımlayabilir ya da tuval düğümündeki bir klibi ayarlayabilirsiniz. pixellation görüşmek üzere

Update, ben, o zaman değiştirmek istediğinizde bugüne kadar çizilmiştir grafik komutları tüm kaydını tutmak gerekir düşünüyorum büyütme pixellation sorunları önlemek için

sorunları zoom faktörü, tuvali temizle, yeni ölçeği tuvale uygula, sonra tüm grafik komutlarını tekrarla. Grafik komutlarını kaydetmek için belki svg gibi bazı formatlar kullanılabilir.

Ya da sahne grafiğini kullanabilir ve tuval yerine bunu çizebilirsiniz, sonra pikselleşme sorunlarınız da olmaz.

Burada dikkat edilmesi gereken önemli nokta, brandaın bir tür acil mod ateşi olması ve sahne grafiği gibi korunmuş bir mod çizim hizmetinden ziyade bir şey unutması olduğunu düşünüyorum.

+0

evet, bu çalışır. Bir çeşit. Oldukça kötü olan her şeyi pikselleştirir. Çizgiler sadece vektörler olduğu için, ayarladığınız büyütme işleminde her şeyi "yeniden çizmenin" bir yolu olup olmadığını merak ediyorum. Sadece düz bir grup nesnesini tuvali kullanırken kullandığımı biliyorum. Şöyle gözüküyordu: özel void reDrawPreview() {Node n: canvsGroup.getChildren() için { { Satır nd = (Satır) n; nd.setStrokeWidth (Draw2d.getStrokeWeight()); } – ril3y

+0

Biçimlendirme konusunda özür dilerim .. Yorumlarda kodu nasıl biçimlendirdiğinizden emin değil misiniz? – ril3y

+0

Bu videoda 3:36'da nasıl çalıştığını görebilirsiniz. http://www.youtube.com/watch?v=kdJZbVO4E4Q&feature=g-upl – ril3y