江
江南草
Unregistered / Unconfirmed
GUEST, unregistred user!
在改写directx8sdk的windowed mode这个例子时,需要从一个bitmap创建一个palette,本想简单的问题,但是在setpalette时老出错:Invalid pixel format as specified.
我试了好几种方法,其中之一如下:
lpDD : IDirectDraw7;
lpSF : IDirectDrawSurface7;
lpPal : IDirectDrawPalette;
dret : HResult;
bmp : TBitMap;
hbmp : HBitmap;
palsize : integer;
pal : TMaxLogPalette;
begin
lpPal := nil;
bmp := TBitmap.create;
bmp.LoadFromResourceName(0,'directx');
hbmp := bmp.Handle;
if GetObject(bmp.palette,sizeof(palsize),@palsize) = 0 then
begin messagebox(0,'Get Bmp Pal size error','Information',mb_ok+mb_iconinformation);
bmp.free; exit;
end;
with pal do
begin
palNumEntries := palsize;
palVersion := $300;
GetPaletteEntries(bmp.Palette,0,palsize,palPalEntry);
end;
ByteSwapColors(pal.palPalEntry,pal.palNumEntries);
dret := lpDD.CreatePalette(DDCAPS_8BIT,@pal.palPalEntry,lpPla,nil);
//Here,dret = DD_OK
dret := lpSF.SetPalette(lpPal);
//这里出错。"The pixel format was invalid as specified."
是不是窗口模式下的palette有特殊要求?
我试了好几种方法,其中之一如下:
lpDD : IDirectDraw7;
lpSF : IDirectDrawSurface7;
lpPal : IDirectDrawPalette;
dret : HResult;
bmp : TBitMap;
hbmp : HBitmap;
palsize : integer;
pal : TMaxLogPalette;
begin
lpPal := nil;
bmp := TBitmap.create;
bmp.LoadFromResourceName(0,'directx');
hbmp := bmp.Handle;
if GetObject(bmp.palette,sizeof(palsize),@palsize) = 0 then
begin messagebox(0,'Get Bmp Pal size error','Information',mb_ok+mb_iconinformation);
bmp.free; exit;
end;
with pal do
begin
palNumEntries := palsize;
palVersion := $300;
GetPaletteEntries(bmp.Palette,0,palsize,palPalEntry);
end;
ByteSwapColors(pal.palPalEntry,pal.palNumEntries);
dret := lpDD.CreatePalette(DDCAPS_8BIT,@pal.palPalEntry,lpPla,nil);
//Here,dret = DD_OK
dret := lpSF.SetPalette(lpPal);
//这里出错。"The pixel format was invalid as specified."
是不是窗口模式下的palette有特殊要求?