Entwickler-Ecke
Sonstiges (Delphi) - Programm zum Bilderverkleinern (brauche hilfe)
friesi - Mo 22.07.02 22:08
Titel: Programm zum Bilderverkleinern (brauche hilfe)
Hallo!
Ich wollte ein Programm schreiben das Bilder aus einem bestimmten Ordner auf eine Pixelgröße verkleinert!
also das z.b. alle bilder auf 50x50pixel verkleinert und mit dem Dateinamen: "NORMALERDATEINAME_small.jpg / .gif .u.s.w abspeichert!
nun meine frage
Da ich noch nicht solange mit Delphi arbeite wollte ich fragen wie ich die Bilder aus einem Verzeichnis auslesen kann, sie dann so verarbeite das sie verkleinert werden und dann wieder abgespeichert werden
hoffe mir kann einer helfen!
Ich bedanke mich schon mal im vorraus!
Alfons-G - Mo 22.07.02 23:40
Hi,
für eine komplette Lösung habe ich jetzt keine Zeit, aber wenn Du selber mal suchen (und experimentieren) willst, dann schau mal in der Delphi-Hilfe unter TBitmap und den dazugehörigen Eigenschaften LoadFromFile und SaveToFile.
Zum Auslesen eines Verzeichnisses mach' Dich über FindFirst, FindNext und FindClose kundig.
Bilder verkleinern kannst Du mit TCanvas.StretchDraw(), wobei TCanvas wieder eine Eigenschaft von TBitmap ist.
Mit Bordmitteln geht das allerdings nur mit bmp- und jpg-Dateien. Für Gifs und andere Formate bist Du auf externe Komponenten angewiesen.
:)
b.brecht - Di 23.07.02 00:56
Kannst du nciht einfach die BitMap in ein TImage laden (Image1.Picture.LoadFromFile('test.bmp');) .
Dann einfach so:
Quelltext
1: 2: 3:
| Image1.Picture.Bitmap.Width:=50; Image1.Picture.Bitmap.Height:=50; Image1.Picture.SaveToFile('C:\test2.bmp'); |
DeCodeGuru - Di 23.07.02 08:53
Hi!
@b.Brecht: Soweit ich weiss dürfte das nicht funktionieren. Damit machste nur die Bitmap kleiner. Aber er will ja das Bild verkleinern. Wenn man jetzt nur die Width und Height-Eigentschaften ändern, dann wird das Bild nicht auf die entsprechenden Werte verkleinert (oder vergrößert).
@friesi:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Button1Click(Sender: TObject); begin if OpenDialog1.Execute then Image1.Picture.LoadFromFile(OpenDialog1.FileName); end;
procedure TForm1.ResizeImage(newWidth,newHeight: Integer); begin SetStretchBltMode(Image2.Canvas.Handle, Halftone); StretchBlt(Image2.Canvas.Handle, 0,0,newwidth,newheight,Image1.Canvas.Handle,0,0,Image1.Width,Image1.Height,SRCCOPY); end;
procedure TForm1.Button2Click(Sender: TObject); begin ResizeImage(50,50); end; |
Damit kannste es mal versuchen. Wie man sieht, brauchste dafür 2 Images auf der Form
b.brecht - Di 23.07.02 09:10
Also wenn du die Eigenschaften
"Image1.width" und "Image1.Height" einstellst, dann stimmt das. Bei Bitmap allerdings verändert er die Größe auch beim Speichern!
Teste es!
DeCodeGuru - Di 23.07.02 11:53
| Zitat: |
Also wenn du die Eigenschaften
"Image1.width" und "Image1.Height" einstellst, dann stimmt das. Bei Bitmap allerdings verändert er die Größe auch beim Speichern!
|
Echt? Wusste ich nicht. Aber man lernt nie aus :D
Mach ich.
friesi - Di 23.07.02 11:57
Danke :)
werd es geleich mal testen!
Wenn ich es hinbekommen habe oder noch fragen habe meld ich mich nochmal :)
Wenn einer noch Tipps hat kann er sie gerne noch posten *gg*
friesi - Di 23.07.02 13:41
@DeCodeGuru
Was meinst du eigentlich hier mit:
OpenDialog1 ?!
also ich hab das bis jetzt so!
Ich habe das erstmal so gemacht das ich die Datein aus einem Verzeichnis "auslese"
Die datein aus einem Verzeichnis stehen nun auch immer schön in der FileListBox1 :)
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.DriveComboBox1Change(Sender: TObject); begin DirectoryListBox1.Drive := DriveComboBox1.Drive; FileListBox1.Drive := DriveComboBox1.Drive; FileListBox1.Directory := DirectoryListBox1.Directory; end;
procedure TForm1.DirectoryListBox1Change(Sender: TObject); begin DirectoryListBox1.Drive := DriveComboBox1.Drive; FileListBox1.Drive := DriveComboBox1.Drive; FileListBox1.Directory := DirectoryListBox1.Directory; end; |
da die JPG Bilder alle von 000-0?? Nummeriert sind wollte ich das mit einer FOR schleife machen.
Quelltext
1: 2: 3:
| FOR i:=0 TO filelistbox1.count-1 DO IF pos(filelistbox1.Items[i],'.jpg')<>0 THEN image1.Picture.LoadFromFile.filelistbox1.Items[i]; |
nur klappt das irgendwie nicht! :(
ich glaub ich hab da einen Denkfehler :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!