我对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课程的学习,但同时我也在尝试将其实际应用,以帮助将概念融入其中。
答案 0 :(得分:3)
从the documentation开始。 Img
显然没有您要的内容,那么它还能在哪里呢? Image
的文档中提到了一种相关的convertImage
类型-我想知道那是什么。事实证明,it has a width and a height。那么,如何从Image
中获得Img
? imgToImage
将给我们一个DynamicImage
,其中有几个构造函数,每个构造函数都包含一个Image
。找出Image
内的DynamicImage
类型,然后询问Image
的尺寸。
该模块中的其他镜头类东西也许有一些更简单的方法,但对我而言并不明显,而且这种方法似乎很简单,如果有麻烦的话。