我对 Haskell 很陌生,所以如果这太基本或者没有什么意义,我深表歉意。我正在尝试阅读图像;我可以使用以下代码将其添加到像素数据列表中:
data Pixel = Pixel {
red :: Integer,
green :: Integer,
blue :: Integer,
alpha :: Integer
} deriving (Show)
getImagePixelArray :: FilePath -> IO (Codec.Picture.Repa.Img RGBA)
getImagePixelArray fp = do
img <- (either error return =<< readImageRGBA fp)
return img
getImagePixelData :: Codec.Picture.Repa.Img RGBA -> [(Word8,Word8,Word8,Word8)]
getImagePixelData img = R.toList (collapseColorChannel img)
rawPixelToPixel :: (Word8,Word8,Word8,Word8) -> Pixel
rawPixelToPixel (r, g, b, a) = Pixel {
red = (toInteger r),
green = (toInteger g),
blue = (toInteger b),
alpha = (toInteger a)
}
main = do
imageData <- getImagePixelArray "./images/image1.png"
let imageRawPixels = getImagePixelData imageData
let asPixels = Prelude.map rawPixelToPixel imageRawPixels
mapM print asPixels
我或多或少地关注正在发生的事情,但我对 Haskell 的了解仍然有限,所以在理解 api 文档时,我有点挣扎。
我真的希望能够解析像素的位置;如果我知道图像的宽度和高度,我知道该怎么做,但我不知道如何获取图像的宽度/高度。
我正在学习 Haskell 课程,但我也在尝试将其付诸实践,以帮助深入了解这些概念。