linux下c语言绘图库_图形-Haskell像素绘图库linux

在我看来,您实际上并没有在此处绘制任何内容.您确定setColors会按照您的想法工作吗?如果需要内存,那是为8位表面设置调色板,而您明确地设置为32位视频模式.

顺便说一句,如果您确定之前已经完成了图形编程,那么我会知道其中的区别,但是对于其他阅读者来说,这是有益的:8位视频模式将像素颜色作为8位索引存储到256色表中从更大的一组潜在颜色中进行选择;在较高的颜色深度时,就不需要使用调色板表,而是将每个像素颜色直接存储为打包的RGB三元组,通常每个像素为8位(32位像素也具有8位alpha通道,或者只有8位填补更好的内存对齐方式,我不记得了).

无论哪种方式,如果我猜对了您要尝试执行的操作,请尝试将其添加到您的程序中:

import Ix

— Given coordinates, create a 1×1 rectangle containing that pixel

getPix x y = SDL.Rect (fromIntegral x) (fromIntegral y) 1 1

— Draw a pixel on a surface with color determined by position

drawPixel surf (x, y) = do

let pixRect = Just (getPix x y)

pixColor

SDL.fillRect surf pixRect pixColor

— Apply drawPixel to each coordinate on the screen

drawGrad screen = mapM_ (drawPixel screen) $range ((0,0),(255,255))

警告:几乎可以肯定,这是可怕而低效的代码,并且仅在Win32环境中进行了测试.我不是合格的Haskell程序员,因此不应将我的建议视为正确使用该语言的指示.仅限于外用.不要嘲笑快乐乐团IO Monad.

无论哪种方式,我都认为您的问题在于使用SDL,而不是Haskell. Graphics.UI.SDL非常原始,只不过是将C API包装在适当的Haskell类型中.如果您以前没有使用过SDL,或者仅使用了稍微复杂一些的绑定(例如PyGame),则可能需要考虑在C中寻找SDL示例作为参考资料.

Original: https://blog.csdn.net/weixin_31186111/article/details/112833910
Author: 氧化三氢正离子
Title: linux下c语言绘图库_图形-Haskell像素绘图库linux

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/783231/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球