Entwickler-Ecke
Multimedia / Grafik - Animiertes Gif skalieren
pigfacejoe - Sa 11.10.08 15:35
Titel: Animiertes Gif skalieren
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 - Sa 11.10.08 15:44
du könnest jedes bild extrahieren, dann skalieren unddie einzelbilder wieder zu einem gif zusammenfügen.
pigfacejoe - 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 - 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
pigfacejoe - 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?
Delete - 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 - 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 ;-)
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!