Sprite'ı daha sonra görüntülenecek bir bitmap'e karıştıran bir zorunlu oluşturma motoru düşünün. Bu, söz konusu bitmap içindeki tek tek pikselleri verimli bir şekilde dönüştürme yeteneğine büyük ölçüde dayanır. Böyle bir şeyi yan etkileri olmayan bir dilden nasıl yaparım? Sanırım tamamen farklı bir veri yapısı mı deniyor?Haskell'de piksel tabanlı görüntülemeyi nasıl hayal etmeliyim?
cevap
Sen bir algoritma içine değişken durumunu kullanan herhangi bir algoritma dönüştürebilirsiniz o "dizeleri" onunla birlikte devlet. Haskell bunu yapmanın bir yolunu sağlar, böylelikle devlet Monad'la zorunlu programlama gibi hissettirir.
rağmen, temel blit operasyon daha işlevsel bir tarzda yapılabilir geliyor bana. Temel olarak piksel işlemiyle piksel üzerinden yeni bir bitmap oluşturmak için iki bitmap'i birleştiriyorsunuz. Bu bana çok işlevsel geliyor. normalde saf fonksiyonel bir tarzda çok güzel mimarileri oluşturabilir biraz hız vermek isteyen varsa
Yüksek kaliteli zorunlu kod genellikle daha hızlı iyi fonksiyonel kod daha olmakla
Haskell yan etkileri vardır ve Uygun olduğunda onları kullanmalıdır. İçsel döngünüzde yer alan yüksek hızlı bir harman rutini (ve dolayısıyla performans açısından kritiktir) kesinlikle mutasyonun uygun olduğu bir yer, bu yüzden kullanın! ST (U) Array veya IO (U) Dizisi kullanılarak, Haskell
- Rulo Kendi: Sen birkaç seçenek var. Tavsiye edilmez. senin C kendi ve FFI ile diyoruz
- Rulo. Tavsiye edilmez.
- Kullanım zaten böyle bir ameliyat sunar ve bu tür Gtk veya OpenGL gibi yüksek performans, iyi bir arayüz harcanmasını programcı yüzlerce saat vardır birçok grafik araci biri. Şiddetle tavsiye edilir.
tadını çıkarın!
blit area a b = \(x,y) -> if (x,y) `isInsideOf` area then a (x,y) else b (x,y)
durumunda elde edilebilecek bir resimden bir alan blitting bu gösterimi ile
Image :: (Int,Int) -> Color
:
bir görüntüyü temsil eden bir doğal fonksiyonel bir şekilde indeks fonksiyonunu kullanarak bir için ya da başka bir dönüşüm gerekli olan, doğrudan koordinatlara uygulanabilir:
translate (dx,dy) image = \(x,y) -> b (x+dx,y+dy)
Bu sunum size görüntü noktaları ile çalışmanın doğal bir yolunu sunar. ,
quadraticInterpolation :: ((Int,Int) -> Color) -> ((Double,Double) -> Color)
performans bazı durumlarda acı olabilir: Sen, örneğin, kolayca dikdörtgen olmayan alanlarda çalışmak ve bunun yerine her zamanki görüntü ölçekleme algoritmaları parçası olma ayrı fonksiyonu olarak görüntü interpolasyon yapmak gibi hileler yapabilirsiniz Birden fazla görüntüyü bir araya getirdiğinizde ve sonuçta hesaplamalar yaptığınızda. Bu, her bir ardışık hesaplama için her bir piksel için bir test zinciri ile sonuçlanır. Ancak, hatırat uygulayarak, işlevsel gösterimi geçici olarak bir diziye dönüştürebilir ve bunu dizin işlevine dönüştürebiliriz, böylece ardışık işlemler için performans isabetini ortadan kaldırırız.
Not, belleğe alma işleminde paralelliğin tanıtımı için de kullanılabilir.
- 1. Ember.js'de yeniden görüntülemeyi nasıl görüntüleyebilirim?
- 2. Mouseover'da bir hayal gücünün bölümlerini nasıl vurgularım?
- 3. XNA'da 2D piksel piksel nasıl çizilir?
- 4. İşaretlemeyi dezenfekte etmeliyim?
- 5. Powerpoint için ekran görüntülemeyi kapatma
- 6. Piksel
- 7. Yakınlaştırdıktan Sonra UIScrollView'de Görüntülemeyi Etkinleştir
- 8. piksel contentEditable
- 9. Grafik görüntülemeyi başlıyorken parlaklığı devre dışı bırakma
- 10. piksel olarak video piksel oluşturmak, programatik olarak
- 11. Ekrandan bir piksel nasıl okunur?
- 12. Autolayout animate kısıtlaması alt görüntülemeyi etkilemiyor
- 13. piksel font
- 14. Cscope, arama sırasında tam dosya yollarını görüntülemeyi nasıl sağlar
- 15. gibi sunucu tarafında onları işlenmiş zaman verilerle bileşenlerini görüntülemeyi nasıl
- 16. Tüm olay işleyicilerinin aboneliğini iptal etmeliyim?
- 17. MySQL saklı yordamını çağıran Java'yı nasıl test etmeliyim?
- 18. Bir görüntüyü nasıl kontrol etmeliyim? C# asp.net-mvc-2?
- 19. Birden çok Azure İşlevli bir çözümü nasıl organize etmeliyim?
- 20. Tepki-yerel uygulamasında ağ durumunu nasıl kontrol etmeliyim
- 21. Belirli bir argümanın datetime.date nesnesi olduğunu nasıl kontrol etmeliyim?
- 22. std :: dizisi std :: çiftlerini nasıl brace-initialize etmeliyim?
- 23. Görüntüden piksel rengi al
- 24. Android - piksel için dips
- 25. Piksel Facebook için Birden Fazla Süreyi Etkinleştir Piksel İzleme
- 26. Alan aynı piksel rengi ile kaplanmış ve aynı renkle kaplı belirli piksel ve piksel alanının rengini nasıl sildiğimi değiştirir
- 27. Android Studio Piksel 2 sanal cihazı - Piksel 2 AVD
- 28. NIB tabanlı bir projeyi Storyboard tabanlı olarak nasıl dönüştürürüm?
- 29. Piksel cinsinden genişliğin genişliğini nasıl hesaplayabilirim?
- 30. Android Görünümü'nün boyutu piksel cinsinden nasıl belirlenir?