Erstellen eines transparenten benutzerdefinierten Bitmap-Pinsels

8

Problem Definition

Ich versuche, einen benutzerdefinierten Bitmap-Pinsel mit Transparenz zu erstellen, aber es scheint nicht wie erwartet zu funktionieren. Wenn Sie sich dieses Beispiel ansehen. Fügen Sie den Code hinzu und verbinden Sie die Farbe, erstellen und zerstören Sie Ereignisse.

%Vor%

Dieser Code erzeugt zwei gemalte Blöcke. Die linke Seite wird mit einem Bitmap-Pinsel und die rechte Seite mit einer Reihe von Canvas.Draw -Aufrufen gemalt.

Ich möchte, dass der Pinsel mit Transparenz gemalt wird, ähnlich wie bei Verwendung eines Schraffurpinsels. Diese SO-Antwort scheint anzuzeigen, dass es möglich ist:

Wie zeichne ich eine patternBrush mit transparentem Hintergrund (GDI)?

Was ich versucht habe

1) Ich habe versucht, eine durchgehende Hintergrundfarbe zu verwenden, anstatt bsClear zu verwenden. Dies macht den Hintergrund nur weiß.

%Vor%

Wenn ich clFuchsia verwende, dann ist die Farbe Fuchsia. Ich habe auch versucht, den Hintergrund clFuchsia zu malen und dann TransparentColor auf clFuchsia zu setzen. Die Canvas.Draw -Option malt mit Transparenz und der Pinsel nicht.

2) Ich habe versucht, den Alpha-Kanal direkt mit dem folgenden Code einzustellen:

%Vor%

Und dann Aufruf dieser Routine unmittelbar nachdem das Rechteck mit der Hintergrundfarbe gemalt wurde.

%Vor%

Ich weiß, dass der Alpha-Kanal funktioniert, denn wenn ich einen Alpha-Wert von 255 übertrage, erscheint er auch in Canvas.Draw in Schwarz.

%Vor%

3) Ich habe versucht, zu testen, indem ich einen Musterpinsel erstellt habe und diesen statt der Bitmap zugewiesen habe. Das ergibt genau die gleichen Ergebnisse. FBrush ist ein HBRUSH.

%Vor%

Und das Einstellen des Pinsels wie folgt:

%Vor%

4) Ich habe versucht, SetBkMode wie in der SO-Antwort oben angegeben aufzurufen. Das machte überhaupt keinen Unterschied.

%Vor%

Bearbeiten

5) Ich habe gerade mit einer Monochrome Bitmap getestet und es hat das gleiche Problem. Das Bild ist mit einem weißen Hintergrund und einem schwarzen Vordergrund für den Pinsel und transparent für Canvas.Draw gemalt.

%Vor%

Und im Konstruktor:

%Vor%

In der Farbe setzen wir den Handle und nicht die Bitmap-Eigenschaft.

%Vor%     
Graymatter 17.07.2015, 01:20
quelle

1 Antwort

1

Versuchen Sie, diese Nullfarbe vor der Zeichenschleife zu löschen.

Canvas.Clear (TAlphaColorRec.Null);

Grüße. Pau.

    
Pau Dominguez 21.07.2015 12:20
quelle

Tags und Links