Autor Beitrag
pigfacejoe
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: Sa 11.10.08 15:35 
Hi,
folgendes Problem:
Ich möchte eine gif Animationen skalieren. Dazu möchte ich alle Einzelbilder skalieren.
Ich verwende die JVGifAnimator Komponente von den Jedi Komponenten.

Hier mal die Prozedur, die das ganze richten soll:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure skalieren(neww,newh:integer;var gif1:TJvGIFAnimator);
var z:integer;
begin
for z:= 1 to gif1.count-1 do //z läuft alle Einzelbilder durch
begin
gif1.image.Frames[z].Width:=neww;//und ediiert werden sie einzeln(Breite)
gif1.Image.Frames[z].Height:=newh;//Höhe
end;

das ganze klappt allerdings nicht, weil die Eigenschaft gif1.image.frames[z].width und .height "Nur Lesen-Eigenschaften " sind. Habt Ihr eine Idee wie ich alle Einzelbilder in der Grösse bearbeiten kann?

Gruß
Max
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Sa 11.10.08 15:44 
du könnest jedes bild extrahieren, dann skalieren unddie einzelbilder wieder zu einem gif zusammenfügen.

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
pigfacejoe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: Sa 11.10.08 15:47 
Zitat:

du könnest jedes bild extrahieren, dann skalieren unddie einzelbilder wieder zu einem gif zusammenfügen.

Genau das versuche ich ja mit obigen Quelltext zu bezwecken, nur weiss ich nicht, wie ich das anrichten soll ;-)
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Sa 11.10.08 15:53 
ich mein nicht nur jedes bild einzeln ansprechen sondern wirklich: frame nehmen, auf ein Bitmap kopieren, sklieren, nächsten frame nehmen, neues bitmap erzeugen, auf neues bitmap kopieren, skalieren,.... und zum schluss alle erzeugten bitmaps wieder zu einem gif zusammenfügen.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
pigfacejoe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: Sa 11.10.08 17:21 
hello again ,
Ich habe es mal so versucht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure skalieren(neww,newh:integer;var gif1:TJvGIFAnimator);
var z:integer;
Rect : TRect;
Bitmap : TBitmap;
begin
Bitmap := TBitmap.Create;
Rect.Left := 0;
Rect.Top := 0;
Rect.Right := neww;
Rect.Bottom := newh;
for z:= 1 to gif1.image.count-1 do
begin
bitmap:=gif1.Image.Frames[z].Bitmap;
gif1.image.Frames[z].Bitmap.Canvas.StretchDraw(Rect,Bitmap);
end;


Keine Fehlermeldung, alles was hier steht wird abgearbeitet, aber leider bleibt die grösse gleich...
Kann mir jm sagen , wieso?
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 11.10.08 17:45 
Deine temporäre Bitmap wird ja auch nicht skaliert, sondern einfach nur zugewiesen. Mal aus dem Kopf:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure skalieren(neww,newh:integer;var gif1:TJvGIFAnimator);
var z:integer;    
    Bitmap : TBitmap;
    R: TRect;
begin
  Bitmap := TBitmap.Create;
  try
    Bitmap.Width := neww;
    Bitmap.Height := newh;
    R := Rect(0,0,neww,newh);
    for z:= 0 to gif1.image.count-1 do
      begin
        bitmap.Canvas.StretchDraw(R,gif1.Image.Frames[z].Bitmap);
        gif1.image.Frames[z].Bitmap.Width := Bitmap.Width;
        gif1.image.Frames[z].Bitmap.Height := Bitmap.Height;
        gif1.image.Frames[z].Bitmap.Canvas.Draw(Bitmap);
      end;
  finally
    Bitmap.Free;
  end;
end;


Ungetestet, daher ohne Gewähr.
pigfacejoe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: Sa 11.10.08 17:57 
Danke, Prinzip verstanden.
Leider klappt das ganze trotzdem nicht...
Da, wo als Kommentar "HIER" steht, habe ich noch koordinaten eintragen müssen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure skalieren(neww,newh:integer;var gif1:TJvGIFAnimator);
var z:integer;
    Bitmap : TBitmap;
    R: TRect;
begin
  Bitmap := TBitmap.Create;
  try
    Bitmap.Width := neww;
    Bitmap.Height := newh;
    R := Rect(0,0,neww,newh);
    for z:= 0 to gif1.image.count-1 do
      begin
        bitmap.Canvas.StretchDraw(R,gif1.Image.Frames[z].Bitmap);
        gif1.image.Frames[z].Bitmap.Width := Bitmap.Width;
        gif1.image.Frames[z].Bitmap.Height := Bitmap.Height;
        gif1.image.Frames[z].Bitmap.Canvas.Draw(0,0,Bitmap);//HIER
      end;
  finally
    Bitmap.Free;
  end;


Wenn jemand einen heißen Tip hat, bitte posten ;-)