Die*_*lan 5 haskell types codec
我正在尝试使用JuicyPixels库加载PNG,我能够成功完成此操作但我无法弄清楚底层图像的类型.在库中,DynamicImage定义如下.
data DynamicImage =
ImageY8 (Image Pixel8)
| ImageYA8 (Image PixelYA8)
| ImageRGB8 (Image PixelRGB8)
| ImageRGBA8 (Image PixelRGBA8)
| ImageYCbCr8 (Image PixelYCbCr8)
Run Code Online (Sandbox Code Playgroud)
通过简单的试验和错误,我能够通过这样做发现它是ImageRGBA8.
img = (\(ImageRBA8 t) -> t) dynImage
Run Code Online (Sandbox Code Playgroud)
然后就是这么做
imageData img
Run Code Online (Sandbox Code Playgroud)
在ghci中打印图像数据,所有其他类型都会出错.那么如何DynamicImage在没有试验错误的情况下找出已加载的类型.我确信这很简单,我只是遗漏了一些东西.
DynamicImage只是一个 ADT,因此您可以在函数定义或 case 表达式中对其进行模式匹配。使用的确切构造函数取决于您从文件加载的图像类型(因此在本例中为 RGA8,但在其他情况下可能有所不同)。
例如:
case img of
ImageY8 imgPixel8 -> ... do something ...
ImageYA8 imgPixelYA8 -> ...
ImageRGB8 imgPixelRGB8 -> ...
ImageRGBA8 imgPixelRGBA8 -> ...
ImageYCbCr8 imgPixelYCbCr8 -> ...
Run Code Online (Sandbox Code Playgroud)