AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi JPG kleiner machen mit Qualitaet einstellen
Thema durchsuchen
Ansicht
Themen-Optionen

JPG kleiner machen mit Qualitaet einstellen

Offene Frage von "Magier"
Ein Thema von Magier · begonnen am 8. Feb 2009 · letzter Beitrag vom 8. Feb 2009
 
Magier

Registriert seit: 2. Okt 2004
Ort: Bergisch Gladbach
39 Beiträge
 
Delphi 7 Personal
 
#1

JPG kleiner machen mit Qualitaet einstellen

  Alt 8. Feb 2009, 04:00
Guten Abend und erstmal viele Gruesse aus Ecuador ,

ich bin gerade dabei ein Programm zu schreiben das Fotos auf nen FTP hochlaed. Soweit kein Prob, allerdings sollen von den Foto Thumbs erstellt werden mit. Und ich moechte hinzufuegen dass man die JPG Qualitaet einstellen kann beim verkleinern? Wie ist das moeglich?

Hier die funktion mit der ich die JPG verkleinere:
Delphi-Quellcode:
procedure Resizepicture(old_filename, new_filename: string; width, height: integer);
var
  bmp:TBitmap;
  jpeg:TJpegImage;
  x, y:integer;
begin
  Jpeg:=TJpegImage.Create;
  try
    jpeg.LoadFromFile(old_filename);
    bmp:=TBitmap.Create;
      try
        x := jpeg.Width;
        y := jpeg.Height;
        new_size(x, y, width, height);
        bmp.width:=x;
        bmp.Height:=y;
        bmp.canvas.StretchDraw(Rect(0,0,bmp.width,bmp.height),jpeg);
        jpeg.assign(bmp);
      finally
        bmp.free;
      end;
      jpeg.SavetoFile(new_filename);
  finally
    jpeg.free;
  end;
end;
es gibt leider kein jpeg.quality oder so etwas, wie geht das?

und meine zweite Frage ist mathematischer natur:

Ich muss ja die neue Groesse berechnen und ich bekomme es irgendwie nicht hin die so auszurechnen um das Thumb in genau der gleichen Groessenordnung zu bekommen wie das herkunftsbild?

Hier meine funktion new_size:
Delphi-Quellcode:
procedure new_size(x, y, max_x, max_y: integer);
var xtel, ytel: real;
change: integer;
havetochange: boolean;
begin
  if x < y then begin
    change := x;
    x := y;
    y := change;
    havetochange:= true;
  end;
  if max_x < max_y then begin
    change := x;
    x := y;
    y := change;
    havetochange := not havetochange;
  end;

  if ((x < max_x) AND (y < max_y)) then
    exit;
  xtel := x / max_x;
  ytel := y / max_y;
  if xtel < ytel then begin
    //hier muesste ja die neue zuweisung hin, da komm ich aber nicht dahinter
  end
  else begin
    //hier muesste ja die neue zuweisung hin, da komm ich aber nicht dahinter
  end;

  if havetochange then begin
    change := x;
    x := y;
    y := change;
  end;
end;
Oder hat zufaellig noch jemand eine entsprechende Funktion zuhause rumfliegen und verstauben?

Gute Nacht
vom Magier
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz