求固定调色板,替换颜色的方法(100分)

M

Milpas

Unregistered / Unconfirmed
GUEST, unregistred user!
Bitmap,不能改调色板的颜色,替换颜色的值,有什么好方法?
逐个象素读取好象太慢.
 
用scanline啊,速度不慢吧,灰度图就是这么获得的
 
怎么用呢?这个是行扫描吧,能整行换吗?
 
一个灰度化图象的例子,用scanline实现,24位位图!
procedure TMainForm.GraychangeClick(Sender: TObject);
var
p: PByteArray;
x, y: Integer;
Bmp: TBitmap;
Gray: byte;
begin
Bmp := TBitmap.Create;
Bmp.Assign(Image1.Picture.Bitmap);
Bmp.PixelFormat := pf24Bit;
for y := 0 to Bmp.Height - 1 do
begin
p := Bmp.scanline[y];
for x := 0 to Bmp.Width - 1 do
begin
Gray := Round(p[x * 3 + 2] * 0.3 + p[x * 3 + 1] * 0.59 + p[x
* 3]
* 0.11);
p[x * 3] := Gray;
p[x * 3 + 1] := Gray;
p[x * 3 + 2] := Gray;
end;
end;
image1.picture.bitmap.assign(bmp);
bmp.free;
end;
 
这实际上还是每个象素来改呀,读是行而已
 
那你还要怎么样?^_^
 
有没有函数将BITMAP或Canvas中的某一种颜色全部换成另一种颜色?
 
这种函数怎么写出来得?还不是象素?如果是整个一副图颜色反转,倒是可以用invertrectrgn();
 
invertrectrgn函数是API吗?我在Delphi帮助里面查不到。
 
我不想要答案了,我直接改BMP文件,可能会慢一点,但是直接多了

另外想问新问题:
[red]两个不同的调色板,如何建立它们的对应关系?
我现在是凭肉眼来确定(好在俺不是色肓)
有没有算法?
举个例子:将一幅图由调色板A换到调色板B,如果A有这个色rgb(255,34,99),
B没有,那应该转为B的哪一个色?[/red]

懂的请说话,可加分
 
以前讨论很多亚,你查查看。
 
顶部