imageIで円グラフに色を付けたいのですが??

解決


AS  2023-02-07 19:43:37  No: 150772  IP: [192.*.*.*]

私のプログラムでは、棒グラフは使っていますので、
brush.colorとかrectungleとで色は簡単につけれますが、
円グラフはどうやって色を付けるのか教えてください。

昔のBASICでは、閉じられた平面の中の一点を指定したら
その平面に色を付けれましたよね。そんな方法はありますか??

編集 削除
mam  URL  2023-02-08 00:23:34  No: 150773  IP: [192.*.*.*]

Canvas.FloodFill関数の第4引数で「fsBorder」を指定すれば境界線の内側領域を塗り潰せます。
https://mam-mam.net/delphi/vcl_canvas_floodfill.html


ちなみに円グラフを描画するなら、Pieを使えばFloodFill関数を使う必要が無いです。
procedure TForm1.Button1Click(Sender: TObject);
var v:array[0..2] of integer;
    c:array[0..2] of TColor;
    i:Integer;
    s,ss:Integer;
    w,h:Integer;
    x1,y1,x2,y2:Integer;
begin
  v[0]:=180;
  c[0]:=rgb(255,0,0);
  v[1]:=135;
  c[1]:=rgb(0,255,0);
  v[2]:=45;
  c[2]:=rgb(0,0,255);
  s:=0;
  for i := Low(v) to High(v) do
    s:=s+v[i];
  w:=200;
  h:=200;
  Image1.Picture.Bitmap.Width:=w;
  Image1.Picture.Bitmap.Height:=h;
  Image1.Picture.Bitmap.Canvas.Brush.Style:=bsSolid;
  Image1.Picture.Bitmap.Canvas.Pen.Style:=psClear;
  ss:=0;
  for i := Low(v) to High(v) do
  begin
    Image1.Picture.Bitmap.Canvas.Brush.Color:=c[i];
    x1:=trunc(w/2-cos(ss/s*Pi*2+Pi/2)*w/2);
    y1:=trunc(h/2-sin(ss/s*Pi*2+Pi/2)*h/2);
    x2:=trunc(w/2-cos((ss+v[i])/s*Pi*2+Pi/2)*w/2);
    y2:=trunc(h/2-sin((ss+v[i])/s*Pi*2+Pi/2)*h/2);
    Image1.Picture.Bitmap.Canvas.Pie(
      0,0,w,h,
      x2,y2,x1,y1
    );
    ss:=ss+v[i];
  end;
end;


また、TChart(teechart)でグラフを作成するのもありかと思います。
https://mam-mam.net/delphi/vcl_teechart.html

ご参考まで。

編集 削除
AS  2023-02-08 07:55:00  No: 150778  IP: [192.*.*.*]

mamさん、ありがとうございました。
TChartについても勉強してみます。

編集 削除