我正在使用Haskell并尝试编写一个函数
loadImage :: FilePath -> IO [RGBAPixel]
loadImage = ...
type RBGAPixel = (Double, Double, Double, Double)
我意识到列表并不是执行此操作的最有效方法-但我现在只是想在现有结构中添加一些内容。将图片(.jpg,.bmp,.png或.tga)加载到Haskell列表中的最简单方法是什么?
最佳答案
使用JuicyPixels-repa这很简单,不需要任何外部(C)库:
import Codec.Picture.Repa (readImageRGBA, collapseColorChannel)
import Data.Array.Repa as R
import Data.Word
loadImage :: FilePath -> IO [(Word8,Word8,Word8,Word8)]
loadImage fp = do
img <- either error return =<< readImageRGBA fp
let arr = collapseColorChannel img
return $ R.toList arr
或更自由的风格:
loadImage = fmap (R.toList . collapseColorChannel . either error id) . readImageRGBA
(请注意,所有这些代码都是经过键入的,未经测试。请随时喊出任何问题)
广告中的真相:我维持JP-repa。