2013-05-11 17 views
5

JuicyPixels kütüphanesini kullanarak bir PNG yüklemeye çalışıyorum ve bunu başarılı bir şekilde gerçekleştirebiliyorum ancak altta yatan resmin ne tür olduğunu anlayamıyorum. Kütüphanede DynamicImage aşağıdaki gibi tanımlanmıştır.Codec.Picture tarafından yüklenmiş olan DynamicImage türünün ne olduğunu nasıl söylerim

data DynamicImage = 
     ImageY8 (Image Pixel8) 
    | ImageYA8 (Image PixelYA8) 
    | ImageRGB8 (Image PixelRGB8) 
    | ImageRGBA8 (Image PixelRGBA8) 
    | ImageYCbCr8 (Image PixelYCbCr8) 

Basit deneme ve hata ile bunu yaparak bir ImageRGBA8 olduğunu anlayabildim. o zaman sadece görüntü verilerini yazdırmak için GHCi olarak

imageData img 

yapıyor

img = (\(ImageRBA8 t) -> t) dynImage 

, tüm diğer türleri bir hata verir. Peki, bir hata olmadan DynamicImage'un ne tür bir yüklendiğini nasıl anlayabilirim. Eminim bu oldukça basit ve sadece bir şeyleri özlüyorum.

cevap

4

DynamicImage yalnızca bir ADT'dir, böylece bir işlev tanımında veya büyük/küçük harf ifadesinde ona karşı desen eşleştirebilirsiniz. Kullanılan tam kurucu, dosyadan yüklediğiniz resmin türüne bağlı olacaktır (bu durumda RGA8 idi, ancak diğer durumlarda farklı olabilir). Örneğin

:

case img of 
    ImageY8 imgPixel8 -> ... do something ... 
    ImageYA8 imgPixelYA8 -> ... 
    ImageRGB8 imgPixelRGB8 -> ... 
    ImageRGBA8 imgPixelRGBA8 -> ... 
    ImageYCbCr8 imgPixelYCbCr8 -> ... 
+0

teşekkürler. Bunun aptalca bir şey olduğunu biliyordum – DiegoNolan

+0

Aynı şeyleri her türlü görüntüde yapmak istiyorsan ne dersiniz? – jarmond

+0

@jarmond Ardından devam edin. Sorun nedir? Mümkün olan tüm yapıcılar üzerinde manuel bir traversalden daha kolay yapmak istiyorsanız, o zaman juicypixels-utils'den 'fromDynamicImage 'kullanmayı düşünün. –