JuicyPixels не может загружать файлы PNG

Я пытаюсь узнать, как загружать, изменять и сохранять изображения с помощью 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?

1 ответ

Решение
loadSampleImage path = case decodePng path of

Вы пытаетесь буквально декодировать строку "test.png" как PNG. Ты хочешь readPngне decodePng, (Или вы можете просто использовать readImage и не волнует, в каком формате файл.)

Другие вопросы по тегам