私は古い DOS プログラミング、特に VGA を直接制御する方法を学んでいます。私はまた、Cを再学習してより良くするためにこれを行っています.
とにかく、PCX ファイルをロードして表示する小さなプログラムを作成しました。私が使用しているのは、オリジナルの DooM パレットを備えた DooM の cacodemon です。ピクセル データとパレットの 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();
}
}