为什么这个Haskell SDL线应该是白色的?

qre*_*est 6 haskell sdl

下面是一些使用SDL和Haskell绘制对角线的代码.当RGB显然应该是白色时,我得到一条CYAN线.这是在Ubuntu上.难道我做错了什么?

import qualified Graphics.UI.SDL as SDL
import qualified Graphics.UI.SDL.Primitives as SDLP

main = do
    SDL.init [SDL.InitEverything]
    SDL.setVideoMode 640 480 32 []
    SDL.setCaption "My Window" "My Test"
    surf0 <- SDL.getVideoSurface
    white <- SDL.mapRGB (SDL.surfaceGetPixelFormat surf0) 255 255 255
    SDLP.line surf0 0 0 640 480 white 
    SDL.flip surf0
    eventLoop
    SDL.quit
    print "done"
    where
    eventLoop = SDL.waitEventBlocking >>= checkEvent
    checkEvent (SDL.KeyUp _) = return ()
    checkEvent _ = eventLoop
Run Code Online (Sandbox Code Playgroud)

Tra*_*own 1

我在我的系统上遇到了同样的问题(对于线条和其他基元),并且Pixel直接使用构造函数而不是mapRGB似乎给出了正确的颜色。

例如,如果我导入Graphics.UI.SDL.ColorasSDLC和 then let white' = SDLC.Pixel maxBound,我会得到一条白线,如预期的那样。使用SDLC.Pixel 4278190335(或255 * 2^24 + 255,红色的合理值),我得到一条红线。

这显然不是真正的解决方案或答案,但它可能会建议一些起点。

另一件奇怪的事情是:如果我像这样打印你的白色和我的白色:

print =<< SDL.getRGBA white (SDL.surfaceGetPixelFormat surf0)
print =<< SDL.getRGBA white' (SDL.surfaceGetPixelFormat surf0)
print white
print white'
Run Code Online (Sandbox Code Playgroud)

我明白了:

(255,255,255,255)
(255,255,255,255)
Pixel 16777215
Pixel 4294967295
Run Code Online (Sandbox Code Playgroud)

所以它们看起来是一样的getRGBA,但实际Pixel值是不同的。