2013-05-11 32 views
5

我想使用JuicyPixels庫加載PNG,我能夠成功完成此操作,但是我無法弄清楚底層圖像是什麼類型。在庫中,DynamicImage定義如下。如何判斷Codec.Picture加載的DynamicImage的類型是

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

通過簡單的反覆試驗,我發現這是一個ImageRGBA8。

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

然後只是做

imageData img 

在ghci中打印的圖像數據,所有其他類型給出一個錯誤。那麼我怎樣才能找出什麼類型的DynamicImage已經加載沒有試驗的錯誤。我相信這很簡單,我只是想念一些東西。

回答

4

DynamicImage只是一個ADT,因此您可以在函數定義或大小寫表達式中對它進行模式匹配。使用的確切構造函數將取決於從文件加載的圖像的類型(因此在這種情況下,它是RGA8,但在其他情況下,它可能不同)。

例如:

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

感謝。我知道這是愚蠢的 – DiegoNolan 2013-05-11 17:06:04

+0

如果你想對所有類型的圖像做同樣的事情呢? – jarmond 2014-05-11 14:36:58

+0

@jarmond然後繼續。什麼是問題?如果你想要比所有可能的構造函數的手動遍歷更容易,那麼可以考慮使用juicypixels-utils中的'fromDynamicImage'。 – 2014-05-11 16:35:41

相關問題