我正在尝试使用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
的类型。我确信这很简单,我只是遗漏了一些东西。
答案 0 :(得分:4)
DynamicImage
只是一个ADT,因此您可以在函数定义或案例表达式中对其进行模式匹配。使用的确切构造函数将取决于您从文件加载的图像类型(因此在这种情况下它是RGA8,但在其他情况下它可能是不同的。)
例如:
case img of
ImageY8 imgPixel8 -> ... do something ...
ImageYA8 imgPixelYA8 -> ...
ImageRGB8 imgPixelRGB8 -> ...
ImageRGBA8 imgPixelRGBA8 -> ...
ImageYCbCr8 imgPixelYCbCr8 -> ...