Autor |
Beitrag |
pigfacejoe
      
Beiträge: 332
Erhaltene Danke: 1
Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
|
Verfasst: 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:
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 begin gif1.image.Frames[z].Width:=neww;gif1.Image.Frames[z].Height:=newh;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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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 
      
Beiträge: 332
Erhaltene Danke: 1
Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
|
Verfasst: 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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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 
      
Beiträge: 332
Erhaltene Danke: 1
Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
|
Verfasst: Sa 11.10.08 17:21
hello again ,
Ich habe es mal so versucht:
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
|
Verfasst: Sa 11.10.08 17:45
Deine temporäre Bitmap wird ja auch nicht skaliert, sondern einfach nur zugewiesen. Mal aus dem Kopf:
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 
      
Beiträge: 332
Erhaltene Danke: 1
Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
|
Verfasst: 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.
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); end; finally Bitmap.Free; end; |
Wenn jemand einen heißen Tip hat, bitte posten 
|
|
|