我想使用 TCanvas 中的 FloodFill 函数。我有一张图片,它的图片是Png。当我打电话时
Image1.Canvas.FloodFill(20,20,clRed,fsBorder);
出现错误并说“只能修改包含位图的图像”
我写了一段这样的代码来解决我的问题。
procedure myChangeColor(p:TPngImage;colorSrc,ColorDest:TColor);
var i:Integer;
j: Integer;
begin
for i := 0 to p.Width - 1 do
for j := 0 to p.Height - 1 do
if(p.Canvas.Pixels[i,j]=ColorSrc)then
p.Canvas.Pixels[i,j]:=ColorDest;
end;
它工作正常!但问题是执行此操作需要很多时间:(
我的 png 图片为 1.3 MB(高分辨率。14288x7200 像素 => 1.02 亿像素),更改颜色大约需要 2 分钟。这一定是一种方式。因为 Photoshop 用它的油漆桶做了大约 2 秒。
如何在 Delphi 中为 png 图像使用洪水填充?