![]() |
Gradient mit TBitmap32
Liste der Anhänge anzeigen (Anzahl: 1)
Hi.
ich arbeite an einigen Komponenten. dazu benutze ich die Lib. ![]() nun habe ich einige probleme mit Gradient's, genauer gesagt Circular Gradient der Gradient muss in ein bestimmten rammen Reinpassen etwa in einen Rectangle, RoundRect, Round das mit Vertical/Horizontal Gradient funzt,..... nur der rest.
Delphi-Quellcode:
function MakeRectangle(const Rec: TFloatRect): TArrayOfFloatPoint; var FRec : TFloatRect; begin FRec.Left:= 0; FRec.Top:= 0; FRec.Right:= Rec.Right; FRec.Bottom:= Rec.Bottom; Result:= Rectangle(FRec); end; function MakeRoundRect(Radius : TFloat; Rec: TFloatRect): TArrayOfFloatPoint; var FRec : TFloatRect; begin FRec.Left:= 0; FRec.Top:= 0; FRec.Right:= Rec.Right; FRec.Bottom:= Rec.Bottom; Result:= RoundRect(FRec, Radius); end; procedure Gradient_Fill_Vertical(Buffer : TBitmap32; Rec: TRect; RoundRect, Mirror : Boolean; ColorFrom, ColorTo, MirrorFrom, MirrorTo : TColor; MirrorFromPos, MirrorToPos : TFloat); var GradFiller : TLinearGradientPolygonFiller; Polys: TArrayOfArrayOfFloatPoint; OutlinePolygon: TArrayOfFloatPoint; FloatRect : TFloatRect; procedure AddPolygon(const Pts: TArrayOfFloatPoint); begin with TClipper.Create do try Add(Polys, ptSubject); Add(Pts, ptClip); Execute(ctUnion, Polys, pftNonZero); finally Free; end; end; begin FloatRect.Left:= Rec.Left; FloatRect.Top:= Rec.Top; FloatRect.Right:= Rec.Right; FloatRect.Bottom:= Rec.Height; if RoundRect then OutlinePolygon:= MakeRoundRect(8.0, FloatRect) else OutlinePolygon:= MakeRectangle(FloatRect); AddPolygon(OutlinePolygon); GradFiller := TLinearGradientPolygonFiller.Create; try GradFiller.SetPoints(FloatPoint(0, FloatRect.Top), FloatPoint(0, FloatRect.Bottom)); if not Mirror then begin GradFiller.Gradient.StartColor := Color32(ColorFrom); GradFiller.Gradient.EndColor := Color32(ColorTo); end else begin GradFiller.Gradient.StartColor := Color32(ColorFrom); GradFiller.Gradient.AddColorStop(MirrorFromPos, Color32(MirrorFrom)); GradFiller.Gradient.AddColorStop(MirrorToPos, Color32(MirrorTo)); GradFiller.Gradient.EndColor := Color32(ColorTo); end; PolyPolygonFS(Buffer, Polys, GradFiller, pfWinding); finally GradFiller.Free; Setlength(Polys, 0); end; end; |
AW: Gradient mit TBitmap32
Wo ist genau Dein Problem?
|
AW: Gradient mit TBitmap32
Ist das nicht richtiger?
[delphi] GradFiller.SetPoints(FloatPoint(FloatRect.Left, FloatRect.Top), FloatPoint(FloatRect.Right, FloatRect.Bottom)); [delphi] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz