Autor Beitrag
barana
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Di 21.03.06 18:37 
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
ausblenden volle Höhe 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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.Picture.LoadFromFile('großesBild.bmp');  // Das Bild liegt hinter dem GIF
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: 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.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
barana Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: 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.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
barana Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: 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.

PS: Kann dir durchaus nur zustimmen. Wenn du es demnächst abgeben musst, dann solltest du jetzt nichts grundlegendes mehr ändern.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
barana Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Fr 24.03.06 15:50 
kk thanks