Entwickler-Ecke
Multimedia / Grafik - jpeg Bilder
lemmond1976 - Mo 28.04.03 23:15
Titel: jpeg Bilder
hi,
weiß jemand wie ich jpeg Bilder verkleinern kann? Ich möchte breite Bilder in der Breite bescheiden und hohe Bilder in der Höhe beschneiden. Also, die Proportionen sollen erhalten bleiben und nachher sollte das jpeg Bild als Datei abgespeichert werden.
Wäre echt für jede Antwort dankbar !
Viele Grüße
Gunnar
Moderiert von
Tino: Absätze entfernt.
Andreas Pfau - Mi 30.04.03 18:09
1) Mittles TJPegImage laden
2) In ein Bitmap kopieren, am besten mit TBitmap.Assign()
3) Neue Größe berechnen, z.B. Mit:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure ProportionalSize(FrameWidth, FrameHeight, ObjectWidth, ObjectHeight: Integer; out Width, Height: Integer); begin If (FrameWidth / ObjectWidth) * ObjectHeight > FrameHeight Then begin Width := Round((ObjectWidth / ObjectHeight) * FrameHeight); Height := FrameHeight; end Else begin Width := FrameWidth; Height := Round((ObjectHeight / ObjectWidth) * FrameWidth); end; end; |
FtameWidth, frameHeight stellt die maximale Größe dar, ObjectWidth, ObjectHeight die aktuelle Größe, Width, Height ist die neu berechnete Größe, die in den vorgegebenen Rahmen passt, und trotzdem proporional ist.
4) Verkleinern:
Quelltext
1:
| BitBlt(Bitmap1.Canvas.Handle, 0, 0, NewX, NewY, Bitmap1.Canvas.Handle, 0, 0, Bitmap1.Width, Bitmap1.Height, SrcCopy); |
5) Bitmap verkleinern, also mit TBitmap.Width bwz.Height
6) Bitmap in JPEG kopieren
7) JPEG speichern
lemmond1976 - Mi 30.04.03 20:49
Super, danke !!!
lemmond1976 - Mi 07.05.03 23:34
heute habe ich Deinen Code endlich mal ausprobiert, funktioniert super. Nur das Bild wird nicht verkleinert, sondern nur der Rahmen. Somit erhalte ich nur einen Ausschnitt und nicht das Bild in voller Größe. BitBlt hat zu viele Parameter...
FrameWidth setze ich auf 200,
FrameHeight auf 200
kann man ja zum Beispiel im Edit-Feld eingeben... newx und newy bildet den korrekten Rahmen. Soweit läuft alles ok. Das Bild wird aber leider nicht verkleinert. Vielleicht liegt es an BitBlt...
Kannst Du mir nochmal helfen? Danke !
Gruss
Gunnar
Moderiert von
Tino: Absätze entfernt.
Andreas Pfau - Do 08.05.03 16:18
:oops:
Klar, BitBlt() muss StretchBlt() heißen. Sorry. Es kann auch nicht gehen, denn BitBlt() hat 2 Parameter weniger. Ersetze einfach den Code von meinem alten Posting durch StretchBlt(), die Parameter bleiben,
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!