AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Transparent zeichnen

Ein Thema von Cicaro · begonnen am 8. Jul 2005 · letzter Beitrag vom 3. Aug 2005
Antwort Antwort
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#1

Transparent zeichnen

  Alt 8. Jul 2005, 19:07
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 ?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Transparent zeichnen

  Alt 8. Jul 2005, 21:16
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#3

Re: Transparent zeichnen

  Alt 12. Jul 2005, 08:41
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 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.

P.S.: ich bin auch für andere Lösungen (mit Verwendung der API-Funktionen) offen.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

Re: Transparent zeichnen

  Alt 12. Jul 2005, 09:50
Schau doch mal hier nach, das könnte Dir eventuell Helfen.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#5

Re: Transparent zeichnen

  Alt 24. Jul 2005, 12:38
@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 ?
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#6

Re: Transparent zeichnen

  Alt 24. Jul 2005, 12:42
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);
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#7

Re: Transparent zeichnen

  Alt 3. Aug 2005, 13:05
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 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