Delphi benutzerdefinierte Zeichnung - leuchtendes Glas

8

Ich habe viel mit einigen gläsernen Bildern experimentiert, wie dem hier unten, und ich habe gedacht, dass es eine Art geben muss, wie ich das in Code schreiben kann, damit ich es beliebig einfärben kann. Es muss nicht 100% genau wie das Bild unten aussehen, aber ich möchte etwas Code schreiben, um das Oval und den Glaseffekt zu zeichnen (Steigung mit einigen wirklich fantastischen Berechnungen). Ich muss deutlich feststellen, dass ich mit Mathe schrecklich bin, und ich weiß, dass dies einige knifflige Formeln erfordert.

Beispiel für das, woran ich gerade arbeite:

Der Rand des Ovals ist der einfache Teil, der Verlauf, der innerhalb des Ovals von oben nach unten verläuft, ist auch ziemlich einfach - aber wenn es darum geht, die Ränder so zu bleichen, dass sie oben und an den Seiten glasig aussehen habe keine Ahnung, wie ich das machen soll.

Linkes Originalbild:

Ob jemand mich auf ein gutes Tutorial dafür hinweisen kann, oder wenn jemand es demonstrieren möchte, wäre entweder sehr geschätzt.

Hier ist die Prozedur, die ich bisher verwendet habe:

%Vor%     
Jerry Dodge 22.11.2011, 06:59
quelle

2 Antworten

10

Zutaten benötigt:

  • AlphaBlend für den gläsernen Effekt,
  • GradientFill für die obere Gradientenellipse,
  • MaskBlt zum Ausschließen nicht rechteckiger bereits gezogener Teile beim Zeichnen ,
  • in der Tat etwas Mathe, ziemlich einfach.

Es ist wirklich notwendig, die Zeichenaufgabe in kleinen Schritten aufzuteilen und in die richtige Reihenfolge zu bringen. Dann ist das nicht so unmöglich, wie es auf den ersten Blick scheinen mag.

Im folgenden Code verwende ich drei temporäre Bitmaps, um das Endziel zu erreichen:

  • eine Speicherbitmap, auf der alles gezeichnet wird, um das Flimmern zu reduzieren,
  • eine temporäre Bitmap, die für die Unterstützung benötigt wird,
  • eine Maskenbitmap zum Speichern einer Clipping-Form.

Ich mag keine Kommentare im Code, aber ich denke, es spricht für sich selbst:

%Vor%

Beispielcode, um das obige zu erzeugen (plazieren Sie ein TImage -Steuerelement im Hintergrund):

%Vor%

Tweak wie du willst.

    
NGLN 23.11.2011, 01:02
quelle
1

Zuerst müssen Sie ein Bild zeichnen. Es kann Farbverläufe, Transparenz usw. haben. Dann müssen Sie es in Bitmap umwandeln und für jeden Pixel GraphUtil.ColorRGBToHLS / ColorHLSToRGB Funktionen verwenden. In Ihrem Fall müssen Sie nur den Farbton jedes Pixels ändern.

    
Torbins 22.11.2011 08:11
quelle

Tags und Links