2013-05-11 4 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 

は、単に画像データを印刷するGHCiのでは

imageData img 

をやって、他のすべてのタイプはエラーを与えます。では、どういうタイプのDynamicImageが試行錯誤してロードされたのか、どうやって調べることができますか?私はこれがかなりシンプルであると確信しています、私はただ何かを欠いています。

答えて

4

DynamicImageは単なるADTなので、関数定義やcase式でパターンマッチングを行うことができます。使用される正確なコンストラクタは、ファイルからロードしたイメージのタイプに依存します(この場合はRGA8ですが、それ以外の場合もあります)。例えば

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

感謝。私はそれが何かばかげていることを知っていた – DiegoNolan

+0

あなたは画像のすべてのタイプに同じことをしたい場合はどうなりますか? – jarmond

+0

@jarmond次に進む。どうした?すべての可能なコンストラクタに対する手動のトラバーサルよりも簡単に行うには、juicypixels-utilsのfromDynamicImageを使用することを検討してください。 –