Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi 3 bilder übereinander malen (https://www.delphipraxis.net/101196-3-bilder-uebereinander-malen.html)

dajuhsa 9. Okt 2007 21:01


3 bilder übereinander malen
 
tach,
ich hätt gern, dass ein TBitmap gezeichnet wird(CopyRect), darüber noch eins und noch eins(CopyRect).
Aber es wird nur das oberste gezeigt, wie mach ich denn, dass die obersten zwei transparent gezeichnet werden und ich von jedem ein stück sehen kann, also mehrere Ebenen übereinander?

Progman 9. Okt 2007 21:03

Re: 3 bilder übereinander malen
 
TransparentBlt(...) wäre ne Lösung.

dajuhsa 9. Okt 2007 21:07

Re: 3 bilder übereinander malen
 
und wo is des?

Edit: Okay habs jetz gefunden aber ich kapiers nicht :stupid:

Namenloser 9. Okt 2007 21:11

Re: 3 bilder übereinander malen
 
Also entweder du gehst die Bilder Pixel für Pixel durch und rechnest den Transparenzwert aus, was sehr langsam sein dürfte, oder du nutzt die Graphics32-Library. TransparentBlt würde ich nicht empfehlen, da diese funktion imho ein Speicherleck hat.

Progman 9. Okt 2007 21:12

Re: 3 bilder übereinander malen
 
guck mal in die Delphi-Hilfe, das gehört zur Gruppe der ganzen ..Blt-Befehle (BitBlt, StretchBlt etc.)

dajuhsa 9. Okt 2007 21:59

Re: 3 bilder übereinander malen
 
funktioniert nicht ganz so wie ich will ich erneuere die drei bilder nämlich 10 mal in der Sekunde und es bleibt immer beim erstem frame hängen, außer ich erneure es mit Fillrect oder dann ist es ja nicht transparent :gruebel: :wall:
bitte hilfe

Jackie1983 12. Okt 2007 00:30

Re: 3 bilder übereinander malen
 
ich würde es so machen

Delphi-Quellcode:
var
  Ausgabe,  //auf ausgabe wird alles gezeichnet und später auf ein canvas gezeichnet
  bild1,bild2,bild3 : TBitmap; //in form create erstellen und bilder laden
...


Procedure Draw;
var
  i : integer;
begin
  bild1.transparentcolor := clwhite;
  bild1.transparent := true;
//das gleiche mit bild 2 und3
  Ausgabe.draw(0,0,bild1);
  Ausgabe.draw(0,0,bild2);
  Ausgabe.draw(0,0,bild3);

  PaintBox.canvas.draw(0,0,Ausgabe);
end;
irgend wie so, müste funktionieren. Alle weißen felder vom Bitmap sind dann transparent.

mkinzler 12. Okt 2007 06:55

Re: 3 bilder übereinander malen
 
Zitat:

funktioniert nicht ganz so wie ich will ich erneuere die drei bilder nämlich 10 mal in der Sekunde
In diesem Fall sind wohl die Grafikfunktionen des Canvas eh zu langsam. Ich würde hier nach alternativen ausschau halten (z.B. DX, OpenGL, GDI+, ...)

Lossy eX 12. Okt 2007 07:56

Re: 3 bilder übereinander malen
 
Zitat:

Zitat von mkinzler
Zitat:

funktioniert nicht ganz so wie ich will ich erneuere die drei bilder nämlich 10 mal in der Sekunde
In diesem Fall sind wohl die Grafikfunktionen des Canvas eh zu langsam. Ich würde hier nach alternativen ausschau halten (z.B. DX, OpenGL, GDI+, ...)

Das würde ich so nicht unterschreiben! Selbst die olle GDI ist mitunter Hardwarebeschleunigt und wenn man sich an gewisse Dinge hält ist so etwas kein Problem. Klar OpenGL, DX sind in jedem Fall schneller. Allerdings sind das auch ganz neue andere APIs. Wenn es nur etwas simples ist dann macht es in meinen Augen absolut keinen Sinn, wenn man sich erst einmal Monate in ein komplett anderes System einarbeiten muss!

@dajuhsa: Mich würde auch mal interessieren was du genau vor hast? Willst du nur Masking betreiben oder soll es richtige Transparenz enthalten? Bzw. wäre es schon hilfreich, wenn du mal etwas code zeigst. Denn aus
Zitat:

Zitat von dajuhsa
funktioniert nicht ganz so wie ich will ich erneuere die drei bilder nämlich 10 mal in der Sekunde und es bleibt immer beim erstem frame hängen, ...

kann sicherlich keiner der Anwesenden auch nur Ansatzweise erkennen was genau da schief geht. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 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