Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graphics VGA调色板的映射颜色显示错误_Graphics_Dos_Vga - Fatal编程技术网

Graphics VGA调色板的映射颜色显示错误

Graphics VGA调色板的映射颜色显示错误,graphics,dos,vga,Graphics,Dos,Vga,我正在学习旧的DOS编程,特别是直接控制VGA。我这样做也是为了重新学习并在C上取得更好的成绩 无论如何,我已经写了一个小程序,加载PCX文件并显示它。我正在使用的是DooM的cacodemon,带有原始的DooM调色板。像素数据似乎是正确的,调色板的RGB值也是正确的(我打印了所有256个RGB三元组,它们与我使用的编辑器匹配)。但是,当我显示调色板时,有明显的差异,图像的颜色被扭曲 原始图像和调色板: 我的输出(数字是调色板值,并且是正确的): 这是调色板加载代码 void setPal

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

无论如何,我已经写了一个小程序,加载PCX文件并显示它。我正在使用的是DooM的cacodemon,带有原始的DooM调色板。像素数据似乎是正确的,调色板的RGB值也是正确的(我打印了所有256个RGB三元组,它们与我使用的编辑器匹配)。但是,当我显示调色板时,有明显的差异,图像的颜色被扭曲

原始图像和调色板:

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

这是调色板加载代码

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();
   }
}
void setPalette(unsigned char*newPalette)
{
int x,y=0;
//设置调色板内存

对于(x=0;x我算出了。因为VGA只存储64个级别的R、G和B,所以需要将每个值向右移动两次