トップへ(mam-mam.net/)

Delphi Canvasで画像を塗りつぶす:FloodFillの使い方と境界色指定の実例

Delphi Canvasで画像を塗りつぶす:FloodFillの使い方と境界色指定の実例

Delphiで画像を塗りつぶすには、Canvas.FloodFill関数が便利です。
このページでは、境界色(fsBorder)や塗りつぶし色を指定して、Bitmap画像の特定領域を塗りつぶす方法を、実際のコード例とともに紹介します。
Brushの設定やTextOutとの併用など、DelphiのCanvas操作に役立つポイントも解説しています。

(境界線の内側領域の塗りつぶし、指定色領域の塗りつぶし が可能です)

1.Canvas.FloodFill関数の第4引数「fsBorder」を指定(境界線の内側領域を塗りつぶす)

黒の境界線の内側領域を赤に塗りつぶす

procedure TForm1.Button1Click(Sender: TObject);
begin
  //指定した境界色までの領域を現在Brushで塗りつぶし
  //bmp.Canvas.FloodFill(
  //  基準x,基準y,境界色, fsBorder
  //);

  //ブラシの色を赤に設定する
  Image1.Picture.Bitmap.Canvas.Brush.Color:=clRed;
  //黒色の境界の内側領域を、赤に塗る
  Image1.Picture.Bitmap.Canvas.FloodFill(
    60, 100, clBlack, fsBorder);
end;

2.Canvas.FloodFill関数の第4引数「fsSurface」を指定(指定色領域を塗りつぶす)

スカイブルー色の領域を赤に塗りつぶす

procedure TForm1.Button2Click(Sender: TObject);
begin
  //指定した色で塗りつぶされている領域を現在のBrushで塗りつぶし
  //bmp.Canvas.FloodFill(
  //  基準x,基準y,塗りつぶされている色, fsSurface
  //);

  //ブラシの色を赤に設定する
  Image1.Picture.Bitmap.Canvas.Brush.Color:=clRed;
  //スカイブルー色の領域を、赤に塗る
  Image1.Picture.Bitmap.Canvas.FloodFill(
    60, 100, clSkyBlue, fsSurface);
end;