我有一个使用 OpenGL 和 GLUT 在屏幕上显示一些东西的应用程序。我想访问“逐像素”显示的颜色,但我无法理解所提供的方法。
访问此类数据的方法似乎是使用函数:
readPixels :: Position -> Size -> PixelData a -> IO ()
这绝对不是 Haskelly,因为它使用 C 模式获取目标指针并写入该指针。
第三个参数是重要的部分,它的构造类似于PixelData PixelFormat DataType (Ptr a)
。 PixelFormat
并且DataType
都是枚举,前者取值如,RGBAInteger, RGBA, CMYK, etc
后者取值如UnsignedByte, Short, Float, etc.
The selection 让我感到困惑,但这不是真正的问题。我真的在努力使用指针。我不知道要创建什么样的Storable
数据来malloc
创建指针,或者如果我选择使用mallocBytes
.
我有一个我正在搞乱的功能,目前看起来像这样:
pixels :: IO ()
pixels = do
pointer <- mallocBytes 50000
let pdata = PixelData RGBA Int pointer
let pos = Position 0 0
let siz = Size 10 10
readPixels pos siz pdata
print pdata
mypixels <- peek pointer
-- TODO, what kind of data is mypixels?
free pointer
它运行良好,我只是不知道如何使用从Ptr
. 也许我没有完全理解文档,但是如何确定指针处的数据类型以及如何在我的程序中使用它?请注意,我选择的论点是任意的RGBA
,Int
它们听起来足够无害。Color 4
我真正想要的是某种格式(或类似性质)的 RGBA 像素值的列表或多维列表。任何帮助将不胜感激,我似乎不知所措。