小弟是初次接触DirectX,最近在看《windows游戏编程大师技巧》,书上有一节讲载入位图,是将颜色信息存在一个buffer数组里(如果是8位位图再保存一份调色板信息到palette数组),再依次写到surface上。我试着在32位模式写了下,显示16位和24位位图都没问题,但是显示8位位图时图象确是歪曲的,请问要经过什么样的换算才可以正确的贴图呢?
我是这样读8位图的:
#define RGB32BIT(a,r,g,b) ((b)+((g)<<8)+((r)<<16)+((a)<<24))
int mempitch=ddsd.lpith;
for(y=0;y<h;y++)
{
for(x=0;x<w;x++)
{
int blue=bitmap2.palette[bitmap2.buffer[(y*(w)+x)]].peBlue,
green=bitmap2.palette[bitmap2.buffer[(y*(w)+x)]].peGreen,
red=bitmap2.palette[bitmap2.buffer[(y*(w)+x)]].peRed;
c[x+(y*mempitch>>2)]=(DWORD)RGB32BIT(0,red,green,blue);
}
}
buffer中是按顺序存储的每个点的色彩序号,palette是该位图的调色板.