5

我正在尝试使用 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不尝试错误的情况下确定已加载的类型。我敢肯定这很简单,我只是错过了一些东西。

4

1 回答 1

4

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

例如:

case img of
  ImageY8   imgPixel8   -> ... do something ...
  ImageYA8  imgPixelYA8 -> ...
  ImageRGB8 imgPixelRGB8 -> ...
  ImageRGBA8 imgPixelRGBA8 -> ...
  ImageYCbCr8 imgPixelYCbCr8 -> ...
于 2013-05-11T16:20:28.633 回答