我正在从 VCL 转换为 FMX。在VCL中,TBitmap的TCanvas中有一个名为FloodFill的函数,它允许TBitmap的 Canvas 充满特定的颜色,直到在位图的 Canvas 上达到另一种特定的颜色。
FMX 中有与此功能等效的函数吗?
最佳答案
根据 RRUZ 的回答和 Anthony 的回复,我编写了以下代码:
Procedure TForm1.FloodFill(BitmapData:TBitmapData; X, Y:Integer; OldColor, NewColor: TAlphaColor);
var
Current: TAlphaColor;
begin
Current := BitmapData.GetPixel(X, Y);
if Current = OldColor then begin
BitmapData.SetPixel(X,Y,NewColor);
FloodFill(BitmapData, X+1, Y, OldColor, NewColor);
FloodFill(BitmapData, X-1, Y, OldColor, NewColor);
FloodFill(BitmapData, X, Y+1, OldColor, NewColor);
FloodFill(BitmapData, X, Y-1, OldColor, NewColor);
end;
end;
以及使用示例:
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Single);
var
MyBmpData: TBitmapData;
OldColor, NewColor: TAlphaColor;
ix, iy: integer;
begin
Image1.Bitmap.Canvas.Bitmap.Map(TMapAccess.ReadWrite, MyBmpData);
ix := round(X); iy := Round(Y);
OldColor := MyBmpData.GetPixel(ix, iy);
NewColor := ColorComboBox1.Color; // or use some other source for a new color
FloodFill(MyBmpData, ix, iy, OldColor, NewColor) ;
Image1.Bitmap.Canvas.Bitmap.Unmap(MyBmpData);
end;
关于delphi - 对于 TBitmap,FMX 中是否有相当于 FloodFill 的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22813461/