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 億 200 万ピクセル) で、色を変更するのに約 2 分かかります。それは方法でなければなりません。ペイントバケツを使用したPhotoshopは約2秒でした。
Delphiでpng画像にフラッドフィルを使用するにはどうすればよいですか?