如何判断Codec.Picture加载的DynamicImage的类型

时间:2013-05-11 16:07:16

标签: haskell types codec

我正在尝试使用JuicyPixels库加载PNG,我能够成功完成此操作但我无法弄清楚底层图像的类型。在库中,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的类型。我确信这很简单,我只是遗漏了一些东西。

1 个答案:

答案 0 :(得分:4)

DynamicImage只是一个ADT,因此您可以在函数定义或案例表达式中对其进行模式匹配。使用的确切构造函数将取决于您从文件加载的图像类型(因此在这种情况下它是RGA8,但在其他情况下它可能是不同的。)

例如:

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