在改写directx8的directdraw的windowedmode的例子时,总是不能正确的创建palette,准确的说是lpSF.SetPalette(lpDDPal);时说“invalid pixel format。..."
谁能给个正确的例子?下次把我的代码给帖出来。
(lpSF : IDirectDrawSurface7;
lpDDPal : IDirectDrawPalette;)
谁能给个正确的例子?下次把我的代码给帖出来。
(lpSF : IDirectDrawSurface7;
lpDDPal : IDirectDrawPalette;)
解决方案 »
- 为啥我发简历的公司回音少
- 请问将String类型转换为Double类型的函数是什么?谢谢
- 如何在delphi中打开autocad的文件?
- "microsoft jet 3.51 ole db provider"和"microsoft ole db provider for odbc drivers"的区别
- 急需DEPHI高手
- 本人初学DELPHI:如何在TWEBBROWSER中使用自己的POPUPMENU,入即给分
- 简单的问题:如何?
- WINSOCK问题:gethostbyname怎么用?
- 我有老婆啦,但是40岁的,我才20岁。唉!!!!!1
- 如何使用SQL语句的返回值。
- 如何用MDAC的最新版本
- 请问为什么adoStoreProc中执行时出现'在SQL语句结尾出现字符。,'的提示?
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有特殊要求?
var
pal : array[0..255]of TTrueColor;
lpPal : IDirectDrawPalette;
tb : TBitmap;
begin
tb:=TBitmap.Create;
tb.LoadFromFile('C:\abc.bmp');
GetPaletteEntries(tb.Palette,0,255,pal);
lpDD.CreatePalette(DDPCAPS_8BIT,@pal,lpPal,nil); //lpDD:IDirectDraw
lpSF.SetPalette(lpPal); //lpSF:IDirectDrawSurface
tb.free;
end;关键问题是没搞清楚TableColor及palette的意义,呵呵。