1

私は古い DOS プログラミング、特に VGA を直接制御する方法を学んでいます。私はまた、Cを再学習してより良くするためにこれを行っています.

とにかく、PCX ファイルをロードして表示する小さなプログラムを作成しました。私が使用しているのは、オリジナルの DooM パレットを備えた DooM の cacodemon です。ピクセル データとパレットの 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();
   }
}
4

1 に答える 1

2

私はそれを考え出した。VGA は R、G、および B の 64 レベルしか格納しないため、各値を右に 2 回シフトする必要があります。

于 2012-09-08T00:58:41.603 に答える