首页  编辑  

扇形显示

Tags: /超级猛料/Picture.图形图像编程/控件和绘图/   Date Created:

扇形显示

本人专门为zzw作了以下的通用函数, 试试调用一下,正好能够解决你的问题。

procedure Display( Canvas : TCanvas; bmp : TBitmap; rect : TRect );

//功能:以逆时针方向逐渐显示一幅位图.

//Canvas : 窗口的Canvas;

//bmp : 待显示的位图;

//rect : 显示区域

var

 i, a, b, x0, y0, x, y : Integer;

 d : Extended;

 r : TRect;

 Membmp : TBitmap;

begin

 a := ( rect.right - rect.left ) div 2; //椭圆横轴

 b := ( rect.bottom - rect.top ) div 2; //椭圆纵轴

 x0 := rect.Left + a;                   //椭圆中心

 y0 := rect.Top + b;                    //

 r.Left := 0;

 r.Top := 0;

 r.Right := 2 * a;

 r.Bottom := 2 * b;

 Membmp := TBitmap.Create;              //建立等大的内存位图

 Membmp.Width := 2 * a;

 Membmp.Height := 2 * b;

 Membmp.Canvas.Brush.Color := clBlack;          //涂黑

 Membmp.Canvas.FillRect( r );

 Membmp.Canvas.Brush.Color := clWhite;

 for i := 1 to 36 do

 begin

   d := i / 18 * 3.1415926;

   x := x0 + Round( a * Cos( d ) );

   y := y0 - Round( b * Sin( d ) );

//用白色画扇形

   if ( i = 36 ) then

     Membmp.Canvas.Ellipse( x0 - a, y0 - b, x0 + a, y0 + b )

   else

     Membmp.Canvas.Pie( x0 - a, y0 - b, x0 + a, y0 + b, x0 + a, y0, x, y );

   Membmp.Canvas.CopyMode := cmSrcAnd;

//显示位图的扇形区域

   Membmp.Canvas.CopyRect( r, bmp.Canvas, r );

   Canvas.CopyRect( rect, Membmp.Canvas, r );

 end;

 Membmp.Free;

end;