请问我想把一个16色的BMP LOAD 到 TIMAGE 后,如何改变调色板使图象颜色发生变化,80分,谢谢!(80分)

  • 主题发起人 白河愁
  • 开始时间

白河愁

Unregistered / Unconfirmed
GUEST, unregistred user!
我试了用 SetPaletteEntries 来改变颜色结果颜色显示不正确,何解?
 
我没试过,改变调色板后有否重画,或者用timage就不行。
 
画了,但没用。
 
var lplogpal:pLogPalette;
i:integer;
begin

GetMem(lpLogPal,sizeof(TLOGPALETTE) + ((16) * sizeof(TPALETTEENTRY)));
// lpLogPal.palVersion := $300;
lpLogPal.palNumEntries := 16;
for i:=0 to 15 do
Begin
lpLogpal.palPalEntry.peRed:=GetRValue(pans.Color);
lpLogpal.palPalEntry.peGreen:=GetGValue(pans.Color);
lpLogpal.palPalEntry.peBlue:=GetBValue(pans.Color);
lpLogpal.palPalEntry.peFlags:=PC_RESERVED;
End;

Bmp.Palette := CreatePalette(lpLogpal^);
// Image1.Picture.Bitmap.Palette := CreatePalette(lpLogpal^);
FreeMem(lpLogPal);
RealizePalette(Bmp.Canvas.Handle);
// RealizePalette(Image1.Picture.Bitmap.Canvas.Handle);
Image1.Canvas.draw(0,0,bmp);
// Image1.Picture.Bitmap:=bmp;

end;
 
没人会??
 
1. 检查你的图象
2. pans.Color 是什么东西?
 
图象是一个 16 色的BMP,pans.color 是储存了那16种颜色的记录
 
// lpLogPal.palVersion := $300;

这一句不要注释!
 
对了,还有
Image1.Picture.Bitmap.PixelFormat := pf4bit;
 
之前有的,但是也一样没用。
 
改成这样也不行........但是如果把GetRValue(pans.Color)换成RANDOM(255)之类的颜色
居然可以改变,pans.color是定义的颜色代码。
GetPaletteEntries(Image1.Picture.Bitmap.Palette,0,16,pal);
for i:=0 to 15 do
begin
pal.peFlags:=PC_RESERVED;
pal.peRed:=GetRValue(pans.Color);
pal.peGreen:=GetGValue(pans.Color);
pal.peBlue:=GetBValue(pans.Color);
end;
SetPaletteEntries(Image1.Picture.Bitmap.Palette,0,16,pal);
RealizePalette(Image1.Picture.Bitmap.Canvas.Handle);
Image1.Repaint;
 
查以前的资料
 
查得到就不用问了。
 
问题已被我解决,请斑竹帮助把分收回。
 
顶部