我正在学习旧的 DOS 编程,特别是直接控制 VGA。我也这样做是为了重新学习并在 C 方面做得更好。
无论如何,我已经编写了一个小程序来加载 PCX 文件并显示它。我使用的是来自 DooM 的 cacodemon,带有原始的 DooM 调色板。像素数据以及调色板的 RGB 值似乎是正确的(我对所有 256 个 rgb 三元组进行了 printf,它们与我正在使用的编辑器相匹配)。但是,当我显示调色板时,会有明显的差异,并且图像的颜色会失真。
原始图像和调色板:
我的输出(数字是调色板值,并且是正确的):
这是调色板加载代码
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();
}
}