我正在尝试学习如何使用 JuicyPixels 版本 3.2.5.1 加载、修改和保存图像。我有以下代码:
{-# LANGUAGE OverloadedStrings #-}
import Codec.Picture
imageCreator :: String -> IO ()
imageCreator path = writePng path $ generateImage pixelRenderer 250 300
where pixelRenderer x y = PixelRGB8 (fromIntegral x) (fromIntegral y) 128
loadSampleImage path = case decodePng path of
Left errorMsg -> putStrLn errorMsg
Right sampleImage -> putStrLn "Loaded Successfully"
main = do
imageCreator "test.png"
loadSampleImage "test.png"
该imageCreator
函数是从 JuicyPixels 文档中稍作修改的:https ://hackage.haskell.org/package/JuicyPixels-3.2.5.1/docs/Codec-Picture.html修改是添加了两个调用fromIntegral
,如没有它们,这个例子就无法编译。(对我来说,文档中的示例无法编译似乎很奇怪,所以如果我在做一些愚蠢的事情,请告诉我)
运行此程序将创建一个名为“test.png”的图像并打印:
无效的PNG文件,签名损坏
这可能是来自调用的错误消息decodePng
。我已经尝试过使用其他一些 PNG,一个是我在 Gimp 中创建的,另一个是我在 MS paint 中创建的。我通过imageCreator "test.png"
从我的主要功能中删除该行来做到这一点,以避免覆盖我想要测试的图像。
为了加载 PNG 图像,我应该改变什么?