Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Transparent zeichnen (https://www.delphipraxis.net/49308-transparent-zeichnen.html)

Cicaro 8. Jul 2005 18:07


Transparent zeichnen
 
Tach, Leute!

Ich möchte ein Bild auf 'nem HDC Transparent (ohne Hintergrundfarbe) ausgeben.

Delphi-Quellcode:
var
Bitm:TBitmap;

procedure DrawTo(DC:HDC);

var
 B:TBitmap;
 MyMask:HBITMAP;

begin
 B:=TBitmap.Create;
 B.Width:=Bitm.Width;
 B.Height:=Bitm.Height;
 B.Canvas.Draw(0,0,Bitm);

 B.Mask(0);
 MyMask:=B.MaskHandle;

// BitBlt(DC,Left,Top,Width,Height,Bitm.Canvas.Handle,0,0,SrcCopy); // bisher

 MaskBlt(DC,Left,Top,Width,Height,Bitm.Canvas.Handle,0,0,
         MyMask,0,0,SrcCopy);

 B.Free;
end;
Das klappt nicht, mein Bitmap wird überhaupt nicht ausgegeben. Mache ich etwas falsch ? Oder soll ich TrasparentBlt (oder so ähnlich) verwenden ? Damit hatte ich auch meine Schwierigkeiten.

Gibt es eine einfache Lösung meines Problems ?

SirThornberry 8. Jul 2005 20:16

Re: Transparent zeichnen
 
wo ist Left, Top, Height, Width definiert?

Und bist du dir sicher das Bitm ein Monchrom Bitmap ist mit der richtigen Maske?
Irgendwie ist dein Source etwas undurchsichtig mit der Mischung aus globalen etc.

Cicaro 12. Jul 2005 07:41

Re: Transparent zeichnen
 
Zitat:

Zitat von SirThornberry
wo ist Left, Top, Height, Width definiert?

Spielt keine Rolle. Bei BitBlt hat das Zeichnen funktioniert (ohne Transparenz) und ich möchte nun auf eine Funktion/Prozedur, die Transparenz unterstützt, übertragen.

Zitat:

Zitat von SirThornberry
Und bist du dir sicher das Bitm ein Monchrom Bitmap ist mit der richtigen Maske?
Irgendwie ist dein Source etwas undurchsichtig mit der Mischung aus globalen etc.

B.Maskhandle ist die richtige Maske (glaube ich), denn ich hab es schon probiert die Maske mit BitBlt zu zeichnen und die war tatsächlich monochrom und so, wie sie auch sein sollte (hat eine bestimmte Farbe abgedeckt).

B (:TBitmap) erstelle ich hier, weil ich auch mein Bitmap nach der Methode Mask mit BitBlt ausgegeben habe. Auch das Bitmap war monochrom (warum auch immer). Um die Grafik also in meinem Bitmap zu sichern musste ich eine Kopie davon erstellen.

Aber das mit dem "undurchsichtig" versteh' ich nicht. :gruebel:

P.S.: ich bin auch für andere Lösungen (mit Verwendung der API-Funktionen) offen.

turboPASCAL 12. Jul 2005 08:50

Re: Transparent zeichnen
 
Schau doch mal hier nach, das könnte Dir eventuell Helfen.

Cicaro 24. Jul 2005 11:38

Re: Transparent zeichnen
 
@turboPASCAL: Das geht zwar, ist mir aber zu viel Code. Das verlangsamt die Ausführung meiner Spiele (wofür ich dieses 'transparent Zeichnen' brauche).

Man kann aber auch mit DrawIcon() transparent zeichnen. Allerdings hat das 2 Nachteile: weniger Farben und das Icon wird immer auf die Größe 32x32 gestreckt/gestaucht.
Über die Farben könnte ich ja noch hinwegsehen aber das mit der Größe ist wirklich nicht schön.

Weiß jemand wie man das abstellen kann ?

turboPASCAL 24. Jul 2005 11:42

Re: Transparent zeichnen
 
Nochmal Dumm gefragt: Warum kein Bitmap + Transparentz ?

Delphi-Quellcode:
Bitmap.TransparentMode := tmFixed;
Bitmap.TransparentColor := clFuchsia;
Bitmap.Transparent := True;
Bitmap.Canvas.Draw(X, Y, WasAuchImmer.Grafik);

Cicaro 3. Aug 2005 12:05

Re: Transparent zeichnen
 
Zitat:

Zitat von turboPASCAL
Nochmal Dumm gefragt: Warum kein Bitmap + Transparentz ?

Allgemein ausgedrückt: weil das Resourcenverschwendung ist. Wen man dynamisch ladbare Bibliotheken (DLL) programmiert, sollte man meiner Meinung nach darauf achten. Und das versuche ich hier zu tun.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz