2011-05-18 13 views
5

cairo'u kullanarak çizilen bir wx.ScrolledWindow sahibim. Şu anda tüm içeriği yeniden çizen bir yakınlaştırma işlevi uyguladım. Ancak çizilecek 200 eğriye kadar olacağı için daha performanslı bir çözüm düşünmeliyim.Kairoyla çizilmiş bir tuvale zum uygulamak için en iyi yol hangisidir?

Bunları düşündüm.

  • Tamponlama görüntüleri yakınlaştırma faktörleri -1/1 librsvg kullanma ve bu konuda bir şeyler okudum (SVG resmini tampon
  • (Bellek tüketen) Does + çok Windows altında librsvg çalışır?)
  • restore eğrilerin çeken gruplar sonra cairo.Context saklanması ve zoom üzerinde (sadece bir fikir .. mümkün olabilir?)

orada diğer olasılıklar var, bir nd: en iyi çözüm nedir?

Çok teşekkürler

cevap

1
gerçekten

Değil sorunuza somut cevap, ama aynı sorunla karşı karşıya ve sadece zum ve pan fonksiyonu zaten uygulanmaktadır matplotlib değiştirilmiştir. Süper performans olsa emin değilim. Programımın daha önce sorunsuz çalıştığını hissediyorum. Ayrıca floatcanvas ve floatcanvas2 denedim ama ikisi de gerçekten mutlu değildi.

+1

Cevabınız için teşekkür ederiz. Ona baktım, ama zaten uygulanan ihracat fonksiyonları nedeniyle cairo ile yapışmayı tercih ediyorum. 'BitmapFromImageSurface' – any1

+0

ile oluşturulan bir ikili arabellek kullanarak bir çözüm bulduğunu duymak için iyi bir performans elde ettim. Ben sadece matplotlib de svg, png ve diğer formatlar için bir ihracat fonksiyonuna sahip olduğunu belirtmek istedim. Kairo'nun ne kadar hızlı olduğunu merak ediyorum çünkü çekilecek yaklaşık 500 eğri var. – Christoph

+2

sadece öğrendim: matplotlib aslında cairo kullanıyor – Christoph

1

Yine de çift arabelleğe alınıyorsanız, yeni yeniden çizilen vektör görüntüsünü beklerken neden "önizleme" olarak hızlı bitmap ölçeği yapmıyorsunuz? İtiraf ediyorum, bunu nasıl yapacağımı bilmiyorum. Ama eğer işe yarayabilirse, işe yarayacak! :)

+0

Fikir için teşekkürler. 'Wx.Bitmap' arabelleğini' wx.Image' '' Image.Scale() 'kullanarak ve 'BitmapFromImage' ile geri dönüştürerek çalıştırarak denedim. Fakat bu, neredeyse kendisinin çizdiği cairo kadar yavaştır, bu yüzden etkisi yoktur. Daha hızlı bir yöntem varsa, bunu bilmek için minnettarım :) – any1

+0

wx.Image'a dönüştürmede neyin rol oynadığından emin değilim, ancak muhtemelen bunu (belki de kolay değil) el ile yaparak önleyebilirsiniz. % 100 yakınlaştırma için her bir pikselin "boyutunu" her iki yönde ikiye katlıyorsunuz. Böylece görüntünün dörtte birinden geçebilir, bir piksel okuyabilir, bir kare içinde 4 kez yazabilirsin (x, y) (x + 1, y) (x, y + 1) (x + 1, y + 1) . Tam ekran bitmap için bile, bu tür küçük işlemler oldukça hızlı olmalıdır. Diğer yakınlaştırma faktörleri için biraz ışık enterpolasyonuna ihtiyacınız olabilir. –

İlgili konular