AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Thumbnails erstellen - Seitenverhältnisse beibehalten
Thema durchsuchen
Ansicht
Themen-Optionen

Thumbnails erstellen - Seitenverhältnisse beibehalten

Ein Thema von DelphiMuffin · begonnen am 27. Dez 2004 · letzter Beitrag vom 11. Jan 2006
Antwort Antwort
DelphiMuffin

Registriert seit: 26. Dez 2004
3 Beiträge
 
#1

Thumbnails erstellen - Seitenverhältnisse beibehalten

  Alt 27. Dez 2004, 10:45
Hi, wie kann ich mit folgender Prozedur aus der CodeLibrary ein jpeg so verkleinern, dass das Verhältnis zwischen width und height beibehalten wird? (Ich habe indir, outdir und ein e am Ende des Prozedurnamens hinzugefügt.)

Code:
procedure resizePicture(indir: string; outdir: string; width, height: integer);
var i:integer;
    bmp:TBitmap;
    jpeg:TJpegImage;
begin
     Jpeg:=TJpegImage.Create;
     try
        jpeg.LoadFromFile(indir);
        bmp:=TBitmap.Create;
        try
           If jpeg.width>jpeg.Height then
              begin
              bmp.width:=width;
              bmp.height:=height;
              end else
              begin
              bmp.width:=height;
              bmp.Height:=width;
              end;
           bmp.canvas.StretchDraw(Rect(0,0,bmp.width,bmp.height),jpeg);
           jpeg.assign(bmp);
        finally
        bmp.free;
        end;
     jpeg.SavetoFile(outdir);
     finally
     jpeg.free;
     end;
end;
  Mit Zitat antworten Zitat
DelphiMuffin

Registriert seit: 26. Dez 2004
3 Beiträge
 
#2

Re: Thumbnails erstellen - Seitenverhältnisse beibehalten

  Alt 27. Dez 2004, 16:38
Delphi-Quellcode:
procedure resizePicture(indir: string; outdir: string; width, height: integer;
                        aspectratio: boolean);
var bmp:TBitmap;
    jpeg:TJpegImage;
begin
     Jpeg:=TJpegImage.Create;
     try
        jpeg.LoadFromFile(indir);
        bmp:=TBitmap.Create;
        if aspectratio=true then height:=width * jpeg.Height div jpeg.Width;
        try
           If jpeg.width>jpeg.Height then
              begin
              bmp.width:=width;
              bmp.height:=height;
              end else
              begin
              bmp.width:=height;
              bmp.Height:=width;
              end;
           bmp.canvas.StretchDraw(Rect(0,0,bmp.width,bmp.height),jpeg);
           jpeg.assign(bmp);
        finally
        bmp.free;
        end;
     jpeg.SavetoFile(outdir);
     finally
     jpeg.free;
     end;
end;
Hab es selber hinbekommen...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Thumbnails erstellen - Seitenverhältnisse beibehalten

  Alt 27. Dez 2004, 18:19
Moin DelphiMuffin,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Schön, dass Du es selber hinbekommen hast, und klasse, dass Du die Lösung auch noch hier gepostet hast
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
DelphiMuffin

Registriert seit: 26. Dez 2004
3 Beiträge
 
#4

Re: Thumbnails erstellen - Seitenverhältnisse beibehalten

  Alt 28. Dez 2004, 11:20
Mich hat die schlechte Qualität gestört und daher hab ich die Routine nocheinmal komplett neu mit der Graphics32 Library geschrieben. Der StretchFilter:=sfLanczos zeichnet das ganze jetzt schön weich Das ganze funktioniert jetzt nicht nur mit jpegs, daher die SaveImage Prozedur, die den Bitmap32 nochmal in ein Jpeg umwandelt. Ich hab ziemlich lange für gebraucht, daher tut euch das nicht an und benutzt meinen Schnipsel Ein Erwähnung wäre natürlich ganz nett

Delphi-Quellcode:
[..] uses Classes, Types, Graphics, Jpeg, GR32, GR32_Image; [..]

procedure SaveImage(inBmp: TBitmap32; filename: string);
var jpeg: TJPEGImage;
    bmp: TBitmap;
begin
     jpeg := TJPEGImage.Create;
     bmp := TBitmap.Create;
     try
        bmp.Assign(inBmp);
        jpeg.CompressionQuality := 100;
        jpeg.Assign(bmp);
        jpeg.SaveToFile(filename);
     finally
            jpeg.Free;
            bmp.Free;
     end;
end;


procedure resizePicture(infile: string; outfile: string; width, height: integer;
                        aspectratio: boolean);
var srcpic, destpic:TBitmap32;
    destrect, srcrect:TRect;
begin
     srcpic:=TBitmap32.Create;
     try
        srcpic.LoadFromFile(infile);
        destpic:=TBitmap32.Create;
        if aspectratio=true then height:=width * srcpic.Height div srcpic.Width;
        try
           destpic.width:=width;
           destpic.height:=height;
           destrect:=Rect(0,0,destpic.width,destpic.height);
           srcrect:=Rect(0,0,srcpic.width,srcpic.height);
           srcpic.StretchFilter:=sfLanczos;
           destpic.Draw(destrect,srcrect,srcpic);
         finally
         srcpic.free;
        end;
     //destpic.SaveToFile(outfile);
     SaveImage(destpic, outfile);
     finally
     destpic.free;
     end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Thumbnails erstellen - Seitenverhältnisse beibehalten

  Alt 11. Jan 2006, 18:52
Da ich diese Funktion hier recht nützlich fand und noch etwas verbessert habe, möchte ich sie euch wieder zur Vefügung stellen. Ich habe das destpic-Create aus dem Try genommen weils da nicht hingehörte. Zweitens habe ich die Sache mit der AspectRatio verbessert sodaß die Parameter height und width jetzt Maximalwerte sind, egal ob das Bild nun hoch- oder breitformatig ist.
Delphi-Quellcode:
procedure resizePicture(infile: string; outfile: string; width, height: integer;
                        aspectratio: boolean);
var srcpic, destpic:TBitmap32;
    destrect, srcrect:TRect;
begin
     srcpic:=TBitmap32.Create;
     destpic:=TBitmap32.Create;
     try
        srcpic.LoadFromFile(infile);
        if aspectratio=true then begin
           if srcpic.Height > srcpic.Width then begin
            width:=height * srcpic.width div srcpic.height;
           end else begin
            height:=width * srcpic.Height div srcpic.Width;
           end;
        end;
        try
           destpic.width:=width;
           destpic.height:=height;
           destrect:=Rect(0,0,destpic.width,destpic.height);
           srcrect:=Rect(0,0,srcpic.width,srcpic.height);
           srcpic.StretchFilter:=sfLanczos;
           destpic.Draw(destrect,srcrect,srcpic);
         finally
         srcpic.free;
        end;
     //destpic.SaveToFile(outfile);
     SaveImage(destpic, outfile);
     finally
     destpic.free;
     end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz