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 user profile iconTino: 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 user profile iconTino: 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,