映射到 VGA 调色板的颜色结果错误

Posted

技术标签:

【中文标题】映射到 VGA 调色板的颜色结果错误【英文标题】:Mapped colors to the VGA palette turn out wrong 【发布时间】:2012-09-01 20:21:19 【问题描述】:

我正在学习旧的 DOS 编程,特别是直接控制 VGA。我也这样做是为了重新学习并在 C 方面做得更好。

无论如何,我已经编写了一个小程序来加载 PCX 文件并显示它。我使用的是来自 DooM 的 cacodemon,带有原始的 DooM 调色板。像素数据以及调色板的 RGB 值似乎是正确的(我对所有 256 个 rgb 三元组进行了 printf,它们与我正在使用的编辑器相匹配)。但是,当我显示调色板时,有明显的差异,并且图像的颜色失真了。

原始图像和调色板:

http://i.imgur.com/7lM5R.png

我的输出(数字是调色板值,并且是正确的):

http://i.imgur.com/MJTUE.png

这是调色板加载代码

void setPalette(unsigned char * newPalette)

    int x, y = 0;
    //SET PALETTE MEMORY
    for (x = 0; x <= 255; x++)
    
        outp(PALETTE_MASK, 0xFF); //Can access whole palette
        outp(PALETTE_REGISTER_WR, x); //Set index
        outp(PALETTE_DATA,newPalette[y]); //Write R value
        outp(PALETTE_DATA,newPalette[y+1]); //Write G value
        outp(PALETTE_DATA,newPalette[y+2]); //Write B value

        printf("%d, %d, %d\n", newPalette[y], newPalette[y+1], newPalette[y+2]);

        y += 3;


        //getch();
   

【问题讨论】:

【参考方案1】:

我想通了。由于 VGA 仅存储 64 级 R、G 和 B,因此您需要将每个值右移两次。

【讨论】:

以上是关于映射到 VGA 调色板的颜色结果错误的主要内容,如果未能解决你的问题,请参考以下文章

如何从图像中生成突出颜色的调色板?

如何从调色板中进行颜色渐变

我的显卡只有32和16色。是否驱动版本低?

如何将颜色减少到指定的调色板

随机生成美观调色板的算法[关闭]

使用角度材质和$ mdThemingProvider更改调色板颜色