Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bilder von gesamten Ordner verkleinern (https://www.delphipraxis.net/7827-bilder-von-gesamten-ordner-verkleinern.html)

Matze 22. Aug 2003 12:13


Bilder von gesamten Ordner verkleinern
 
Hallo zusammen!

Ich habe einen Ordner, in dem Bilder gespeichert sind. In einer ListBox zeigt es mir die jeweiligen Pfade an.

Wie kann ich alle diese Bilder, in möglichst kurzer Zeit, in eine beliebige Größe verkleinern?

Gruß Matze

S - tefano 22. Aug 2003 12:19

Re: Bilder von gesamten Ordner verkleinern
 
In der Code Library findet sich was ganz nützliches.
Den Parameter "Dir" aber nicht falsch interpretieren. Als Dir musst du den Dateinamen übergeben. Naja, die anderen beiden sprechen ja für sich.
Der Code klappt so allerdings nur für .jpg, für Bitmaps musst du ihn ein wenig modifizieren.

Etwas ähnliches habe ich auch in meinem Thumbnailer (Links rulen einfach...) verwendet.

Bis dann,

S - tefano

Matze 22. Aug 2003 12:26

Re: Bilder von gesamten Ordner verkleinern
 
Danke, das schau ich mir mal an.

Gruß Matze

Matze 22. Aug 2003 12:33

Re: Bilder von gesamten Ordner verkleinern
 
Genau so etwas brauche ich, jedoch ist danach die Bildquallität so miserabel, das ich das nicht verwenden kann. :(
Kann man diese procedure verwenden, aber mit einer anderen Bildquallität ?

Matze 22. Aug 2003 14:04

Re: Bilder von gesamten Ordner verkleinern
 
Nochmal danke S - tefano!

Ich nehme jetzt deinen Vorschlag. Das geht ganz gut, solange die Bilder keine Screenshots mit Text sind, da man den Text sonst nicht mehr lesen kann (ist eigentlich logisch). :wink:

Gruß Matze

Matze 22. Aug 2003 14:59

Re: Bilder von gesamten Ordner verkleinern
 
Ich habe FocRacism's Code so umgeändert:

Code:
//Bildgröße ändern
procedure TForm1.ResizePicture(dir: string; width, height: integer);
var i:integer;
    bmp:TBitmap;
    jpeg:TJpegImage;
begin
   Jpeg:=TJpegImage.Create;
   try
   jpeg.LoadFromFile(dir);
    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;
        CreateDir(Edit2.Text);                  //Wieso geht das nicht??
        jpeg.SavetoFile(Edit2.Text);
      except
      end;
   finally
    jpeg.free;
   end;
end;
Wieso geht das an der gekennzeichneten Stelle nicht?

Gruß Matze

S - tefano 22. Aug 2003 15:24

Re: Bilder von gesamten Ordner verkleinern
 
Also für mich sieht das so aus, als würde in deinem Edit2.Text entweder ein Dateiname, oder ein Verzeichnisname stehen.
Eins von beiden wird mit einer der Funktionen CreateDir bzw. Savetofile bestimmt nicht zurechkommen.
Denn entweder versuchst du die Datei unter einem Dateinamen zu speichern, der nur einen Pfad enthält, oder du versuchst ein Verzeichnis mit einem String zu erstellen, der neben dem Pfad auch schon einen Dateinamen enthält.

Beschreib mal genauer, was für ein Fehler kommt und was in Edit2 drinsteht.

Bis dann,

S - tefano

Matze 22. Aug 2003 15:27

Re: Bilder von gesamten Ordner verkleinern
 
Du hast Recht!
Der Dateiname fehlt. :oops:

In Edit2 steht: D:\Bilder

Danke. :mrgreen:

Gruß Matze

Matze 22. Aug 2003 15:35

Re: Bilder von gesamten Ordner verkleinern
 
Jetzt hab ich's so gemacht, aber es geht immer noch nicht. :evil:

Code:
jpeg.SavetoFile(Edit2.Text+'\'+CheckListBox1.Items.Strings[j]);
In der CheckListBox stehen die Dateinamen.
Mit j zähle ich die Einträge der CheckListBox durch und falls sie angeklickt sind, werden sie verkleinert und gespeichert.

Kannst du mir da vielleicht auch helfen? :)

Gruß Matze

S - tefano 22. Aug 2003 15:44

Re: Bilder von gesamten Ordner verkleinern
 
Wie gesagt, auch hier wäre eine genauere Beschreibung von dem, was so passiert recht wertvoll... was genau geht denn nicht?

Matze 22. Aug 2003 15:45

Re: Bilder von gesamten Ordner verkleinern
 
Der Ordner wird ordnungsgemäß angelegt, aber es wird kein Bild darin gespeichert.

Matze 22. Aug 2003 16:00

Re: Bilder von gesamten Ordner verkleinern
 
Falls es dich noch interessiert:

So überprüfe ich, welche Bilder angeklickt wurden:

Code:
procedure TForm1.GroesseaendernClick(Sender: TObject);
var j:integer;
begin
  CreateDir(Edit2.Text);

  for j:=0 to CheckListBox1.Count-1 do
  begin
    if CheckListBox1.Checked[j]=true then
      ResizePicture(Edit1.Text+'\'+CheckListBox1.Items.Strings[j],640, 480)
  end;
end;

S - tefano 22. Aug 2003 16:15

Re: Bilder von gesamten Ordner verkleinern
 
So gut kenn ich mich mit den CheckListen nich aus, aber zum Experimentieren kannst du mal die Abfrage rausnehmen, ob das Item gecheckt ist.
Also einfach drauflos Speichern ohne zu gucken obs auch soll. Wenns dann immernoch nich gespeichert wird... hm. Aber wenn doch, dann muss du anders abfragen.

Matze 22. Aug 2003 16:18

Re: Bilder von gesamten Ordner verkleinern
 
Speichern kann ich schon, aber nur, wenn ich die alten Dateien überschreibe.

Matze 22. Aug 2003 16:31

Re: Bilder von gesamten Ordner verkleinern
 
Ich hab's rausbekommen. :D

Ich hab die Variable j nur beides Mal lokal deklariert. Wenn ich sie global deklariere, dann geht es. :hello:

@S - tefano: Dir nochmals: Vielen Dank!!

Gruß Matze

S - tefano 22. Aug 2003 16:37

Re: Bilder von gesamten Ordner verkleinern
 
Hey, kein Problem :wink:
Danke auch an dich, dass du die endgültige Lösung gepostet hast...

Matze 22. Aug 2003 16:42

Re: Bilder von gesamten Ordner verkleinern
 
Ist doch selbstverständlich, dass ich die Lösung poste, andere wollen ja auch wissen, woran es lag. :wink:

Gruß Matze


Alle Zeitangaben in WEZ +1. Es ist jetzt 18: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