谁有画五角星的函数????????????分多多的给定一个中心原点,和五角星的大小
解决方案 »
- 还是程序员厉害:7·23事故,软件逻辑错误是主要原因。
- 客户端封装,dll,Tclientsocket,onread事件,接收成功后再返回值。
- 请教怎样,可以用CheckBoxList或者ListView控件显示数据库中的多幅图片?
- Interface not supported!请各位高手帮忙
- 请问哪位大哥有delphi中文帮助档,小弟急需,先谢了
- 有没有把stringgrid某一行删掉的函数
- 在导出为excel文档时,如何在一个workbook中创建worksheet
- 如何取得colorcombobox所选中的颜色直?要string型的!!
- 一个有关MIDAS的问题,它已经困惑我很久了!!UP也有分!!
- 请问各位大侠 ,我想在用户关闭窗体的时候出现提示框,如果选择 否 就不关闭窗体
- 如何象瑞星那样监控网页代码?顶者有分!
- 谁知道怎么编程实现远程windows密码修改?
uses Graphics,Types ;
type
TPoint3 =array[0..2] of Tpoint ;
TPoint5 =array[0..4] of Tpoint ;
TFiveStar = class
private
FBitmap: TBitmap;
FRealOFFSet: Double;
FRadius: Integer;
FColor: TColor;
FgraynessColor : Tcolor ;
FContrast: integer;
FBackColor: TColor;
FLongpoints : TPoint5 ;
FShortpoints : TPoint5 ;
FShortR : Double ;
procedure SetColor(const Value: TColor);
procedure SetOFFSet(const Value: integer);
procedure SetRadius(const Value: Integer);
function GetOffset: integer;
procedure SetContrast(const Value: integer);
procedure ChangegraynessColor ;
procedure SetBackColor(const Value: TColor);
function GetRect: TRect;
function GetCanvas: TCanvas;
public
constructor Create;
destructor Destroy; override;
procedure Draw ;
procedure DrawToCanvas(aCanvas:TCanvas;Center:Tpoint);
procedure SaveToFile(Filename:string);
property Canvas : TCanvas Read GetCanvas;
property BackColor : TColor read FBackColor write SetBackColor;
property Radius : Integer read FRadius write SetRadius;
property OFFSet : integer read GetOffset write SetOFFSet;
property Color : TColor read FColor write SetColor;
property Contrast : integer Read FContrast write SetContrast ;
property ClipRect : TRect Read GetRect ;
end;
implementationuses color;{ TFiveStar }{ TFiveStar }procedure TFiveStar.ChangegraynessColor;
var
aRGB : TRGBColor ;
aLum : integer ;
begin
aRGB := TRGBColor.Create ;
try
aRGB.Color := FColor ;
aLum :=Round(aRGB.Lum*(1+FContrast/240)) ;
if (aLum >240) then
aRGB.Lum :=240
else
if aLum<0 then
aRGB.Lum := 0
else
aRGB.Lum := aLum ;
FgraynessColor := aRGB.Color ;
finally
aRGB.Free ;
end;
end;constructor TFiveStar.Create;
begin
inherited ;
FBitmap := TBitmap.Create ;
Fbitmap.Width := 100 ;
Fbitmap.Height := 100 ;
Radius := 50 ;
color := clred ;
Contrast := 50;
end;destructor TFiveStar.Destroy;
begin
FBitmap.Free ;
inherited;
end;procedure TFiveStar.Draw;
begin
Canvas.Brush.Color := FBackColor ;
Canvas.FillRect(Canvas.ClipRect);
DrawToCanvas(Canvas,Point(FRadius,FRadius));
end;procedure TFiveStar.DrawToCanvas(aCanvas: TCanvas; Center: Tpoint);
var
i : integer ;
procedure FullColor(aColor:TColor;p1,p2:Tpoint);
var
aps:TPoint3 ;
begin
aps[0] := Center ;
aps[1] := p1 ;
aps[2] := p2 ;
acanvas.Pen.Color := acolor ;
acanvas.Brush.Color := acolor ;
acanvas.Polygon(aps);
end;
begin
for i := 0 to 4 do
begin
FLongpoints[i].Y :=Center.Y+ Round(sin(FRealOFFSet+i*2*pi/5)*FRadius) ;
FLongpoints[i].x :=Center.x+ Round(Cos(FRealOFFSet+i*2*pi/5)*FRadius) ;
FShortpoints[i].Y :=Center.Y+ Round(sin(FRealOFFSet+pi/5+i*2*pi/5)*FShortR) ;
FShortpoints[i].x :=Center.X+ Round(Cos(FRealOFFSet+pi/5+i*2*pi/5)*FShortR) ;
end;
FullColor(FgraynessColor,FLongpoints[0],FShortpoints[0]);
FullColor(FColor,FLongpoints[1],FShortpoints[0]);
FullColor(FgraynessColor,FLongpoints[1],FShortpoints[1]);
FullColor(FColor,FLongpoints[2],FShortpoints[1]);
FullColor(FgraynessColor,FLongpoints[2],FShortpoints[2]);
FullColor(FColor,FLongpoints[3],FShortpoints[2]);
FullColor(FgraynessColor,FLongpoints[3],FShortpoints[3]);
FullColor(FColor,FLongpoints[4],FShortpoints[3]);
FullColor(FgraynessColor,FLongpoints[4],FShortpoints[4]);
FullColor(FColor,FLongpoints[0],FShortpoints[4]);
end;function TFiveStar.GetCanvas: TCanvas;
begin
Result := FBitmap.canvas ;
end;function TFiveStar.GetOffset: integer;
begin
Result :=Round(180*FRealOFFSet/pi)
end;function TFiveStar.GetRect: TRect;
begin
Result := Rect(0,0,2*FRadius,2*FRadius);
end;procedure TFiveStar.SaveToFile(Filename: string);
begin
FBitmap.SaveToFile(filename);
end;procedure TFiveStar.SetBackColor(const Value: TColor);
begin
FBackColor := Value;
end;procedure TFiveStar.SetColor(const Value: TColor);
begin
FColor := Value;
ChangegraynessColor ;
end;procedure TFiveStar.SetContrast(const Value: integer);
begin
FContrast := Value ;
ChangegraynessColor ;
end;procedure TFiveStar.SetOFFSet(const Value: integer);
begin
FRealOFFSet := (Value mod 360)*pi/180 ;
end;
procedure TFiveStar.SetRadius(const Value: Integer);
begin
if FRadius = Value then Exit ;
FRadius := Value;
FShortR := FRadius*(Cos(pi/5))/2 ;
FBitmap.Width := 2*FRadius ;
fbitmap.Height := 2*FRadius ;
end;end.其中TRGBColor是我寫的專用來處理顏色的一個類.你可以把ChangegraynessColor方法改一下.
把FColor的R,G,B同時加FContrast得到FgraynessColor
var
trim: array [0..10, 0..1] of Single;procedure TNForm.InitTrim;
var
i: Integer;
begin
// 生成一个五角星形状的裁剪曲线,注意:要保证裁剪曲线是封闭的
for i := 0 to 10 do
begin
if Odd(i) then
begin
trim[i,0] := 0.5 * cos(36*i*pi/180) + 0.5;
trim[i,1] := 0.5 * sin(36*i*pi/180) + 0.5;
end
else begin
trim[i,0] := 0.25 * cos(36*i*pi/180) + 0.5;
trim[i,1] := 0.25 * sin(36*i*pi/180) + 0.5;
end;
end;
end;
procedure TNForm.FormPaint(Sender: TObject);
begin
gluBeginTrim(nurb);
// 绘制一个分段线性的曲线用于从曲面上裁剪出一个星形形状来
gluPwlCurve(nurb, 11, @trim, 2, GLU_MAP1_TRIM_2);
gluEndTrim(nurb);
end;