关于调色板的问题求教,请大家帮忙。(100分)

  • 主题发起人 主题发起人 seouly
  • 开始时间 开始时间
S

seouly

Unregistered / Unconfirmed
GUEST, unregistred user!
现在有两个image,我想把image1的调色板用在image2中,但直接赋值不行,如:
Image2.Picture.Bitmap.Palette:= Image1.Picture.Bitmap.Palette;
请问应该怎么实现以上步骤?谢谢!
 
需要通过
GetPaletteEntries
SetPaletteEntries
 
pipi:请说详细点可以吗?麻烦你举个例子
 
只有256色的图片才有palette
var
p:Array[0..255] of TPaletteEntry;
n:integer;
begin
n:=GetPaletteEntries(Image1.Picture.Bitmap.Palette,0,256,p);
if (n>0) and (n<=256) then
SetPaletteEntries(Image2.Picture.Bitmap.Palette,0,256,p);
end;
 
Pipi:
你的程序我试过了,但不行的。可以帮我再看看怎么做吗?
 
怎么没人回答我的问题?大家帮帮忙忙好吗?
卷起千堆雪tyn,可以帮帮忙吗?
 
注意 : 只有256色位图才有调色板!

在Image1、Image2上分别加载两幅256色位图,你再试试看。

procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.Bitmap.Palette :=Image2.Picture.Bitmap.Palette;
end;
 
卷起千堆雪tyn:
两幅都是256色的图的确可以。谢谢。但如果这样做,
那会不会造成image1原来的调色板丢失,造成内存泄漏?需要先释放内存吗?
 
>会不会造成image1原来的调色板丢失?
你可以事先保存Image1.Picture.Bitmap.Palette么
var
pal :HPalette;
begin
......
pal :=Image1.Picture.Bitmap.Palette
.....
end;
没有内存泄漏的.
 
卷起千堆雪tyn:
刚才的做法有问题,请看:
var
pal :HPalette;
begin
......
pal :=Image1.Picture.Bitmap.Palette
Image1.Picture.Bitmap.Palette:=Image2.Picture.Bitmap.Palette;
Image1.Picture.Bitmap.Palette:=pal; //此步不能使图象显示回原来的样子,请问怎么会事?
.....
end;
 
哦,是了,刚看了 setPalette 的源码
Image1.Picture.Bitmap.Palette:=xxx
是先把原来的 HPalette 删除,然后复制新的palette的
所以,你保存的旧palette已经是给deleteObject了的
 
Pipi:
那如果我想保留原来的调色板,该怎么处理?
 
不怕麻烦的话,自己搞一个TBitmap对象来保存罗,反正也不费什么空间
 
多人接受答案了。
 
Pipi.偷懒,。。。。。。。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部