Entwickler-Ecke
Multimedia / Grafik - Frage zu GIFImage Transparenz
barana - Di 21.03.06 18:37
Titel: Frage zu GIFImage Transparenz
Hallo Leute,
ich habe ein Problem mit der Transparenz von Gif Dateien. Ich benutze Delphi 6 und hab mir die GIFImage-Unit runtergeladen. Alles funzt auch eigenltich, bis auf die Transparenten Gifs.
Wenn zwei von diesen abspielen will und das eine Gif liegt unter dem anderen, dann bleibt die Animation vom unteren Gif immer an den Stellen hängen, wo das obere Gif Transparent ist.
Auch wenn ich eine große BMP hinter das GIF lege und anfange die BMP zu bewegen, brennt sich der Hintergrund auf die Transparenten stellen der GIF ein und verändert sich nicht.
am besten ihr probiert das mal aus, denn ich kann es nicht besser erklären
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls,GIFImage;
type TForm1 = class(TForm) Timer1: TTimer; Image1: TImage; Image2: TImage; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin Image1.Picture.LoadFromFile('großesBild.bmp'); Image2.Picture.LoadFromFile('transparentesGif.gif'); end;
procedure TForm1.Timer1Timer(Sender: TObject); begin Image1.Left := Image1.Left + 1 ; end;
end. |
Ich hoffe ihr könnt mir helfen.
danke im Voraus
Lossy eX - Mi 22.03.06 16:40
Das soll nicht rein zufällig so etwas wie ein Spiel werden?
Ich kann dir nicht sagen wie die gifunit arbeitet aber ich denke mal, dass die den Hintergrund kopiert und dann einfach nur die nicht transparenten Pixel übermalt. Wie sie das jetzt anstellt sei erst einmal dahingestellt. Dafür gibt es reichlich wege. Aber so ungern wie ich das sage. Ich denke nicht, dass du da sinnvoll etwas dran ändern kannst. Und falls es doch einen Weg gibt wird der dich mit Sicherheit nicht glücklich machen sondern dich eher nur Nerven kosten.
Für den Fall dass es ein Spiel werden soll. Solltest du dir überlegen was du vor hast. Also wie komplex soll es werden? Wenn es sehr komplex werden soll, dann solltest du dir überlegen ob es nicht sinnvoller wäre eine hardwarebeschleunigte Grafikschnittstelle zu verwenden. Wenn ja solltest du von dem Format gif sowieso weg.
Falls es mit der GDI geht solltest du es schon mal anders aufziehen. Zu erst würde ich keine Images benutzen. Sondern ich würde mir die Bilder in Bitmap oder so laden und sie direkt ziehen. Deine Animation würde ich in einzelne Bilder zerschneiden. Als Bitmap und dann jeweils mit einer einheitlichen Hintergrundfarbe. Diese kann man beim Zeichnen schon mal wesentlich besser weglassen. Evtl solltest du dann einen Backbuffer anlegen in den du erst einmal alles zeichnest und wenn alles fertig zeichnest du das Bild am Stück auf deinen Schirm. Dazu musste mal im Forum suchen. Dazu gibt es X Themen.
barana - Mi 22.03.06 16:52
Ja, das ist ein Spiel und es ist schon fertig. Ist so ein billiger Abklatsch von Diablo geworden. Fehlen halt nur noch die GIF's.
Aber wenn das nicht so geht wie ich es mir gadacht habe, dann werde ich die Bilder wohl tatsächlich manuell animieren müssen. Danke für die Antwort
PS: Mit den Images hast du Recht. Ich hätte keine benutzen dürfen. Die zwingen sogar meinen Rechner in die Knie (XP 3200+, 1024-RAM, GF6800). Dabei ist es ein simples 2D Spiel
Lossy eX - Mi 22.03.06 17:34
Na ja. Hinterher ist man immer schlauer. Stellt sich nur immer wieder die Frage ob man genügend daraus gelernt hat um es beim nächsten Mal besser zu machen. ;-)
Mit den Images hast du da teilweise das Problem, dass du eine Art Kettenreaktion auslöst. So kann es sein, dass wenn du eines bewegst das Eigentliche und die darunter Liegende neu gezeichnet werden müssen. Das äußert sich dann so, dass 2 mal gezeichnet werden muss obwohl eigentlich 1 Mal ausreichen würde.
Das Nächste ist, dass auch wenn du einene eigene Backbuffer benutzt werden große Teile davon immer noch auf der CPU berechnet werden. Was grundsätzlich immer lansgamer als eine Hardwarebeschleunigung ist. Die CPU ist einfach mit zu vielen anderen Dingen beschäftigt als sinnvoll schnell sein zu können. Deswegen wäre es eine Überlegung Wert, wenn du vor haben solltest deine Grafik neu zu machen ob du diese dann nicht gleich komplett neu machst und sie durch Hardware beschhleunigst. Mitunter gibt es noch die Möglichkeit die GDI zu teilen beschleunigen zu lassen. Aber dabei sollte man sich nicht zu viel versprechen. Dann ist sie teilweise beschleunigt.
Wenn nicht solltest du mal probieren ob du evtl. die Gifs so laden kannst und sie auf ein Bitmap zeichnen kannst. Evtl kann es sein, dass du damit dann diese Grafikprobleme nicht mehr hast. Wäre alle mal ein versuch Wert.
barana - Mi 22.03.06 19:28
Das heisst, dass jetzt alles von der CPU berechnet wird?
Gibt es denn Aleitungen wie man sowas anders löst? Ich mein, bei sind arrays vollgestopft mit Images und jede einzelne bewegt sich (Gegner). Naja da ich das Spiel schon nächste Woche abgeben muss werde ich wohl nichts mehr ändern, aber es wäre trotzdem interressant.
Lossy eX - Do 23.03.06 13:52
Ja. Es wird alles von der CPU berechnet.
Anleitungen ist leider so eine Sache. Es gibt reichlich Tutorials aber eher auch nur im Zusammenhnag mit Grafikschnittstellen oder einzelne Techniken. Wenn du es aber später mal neu machen möchtest oder bei der nächsten Version dann tatsächlich richtig aufziehen möchtest, dann solltest du dir eine Hardwarebeschleunigte Schnittstelle anschauen. Kann da nur OpenGL empfehlen. Für Tutorials schau mal auf
www.delphigl.com [
http://www.delphigl.com/].
PS: Kann dir durchaus nur zustimmen. Wenn du es demnächst abgeben musst, dann solltest du jetzt nichts grundlegendes mehr ändern.
barana - Fr 24.03.06 15:50
kk thanks
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!