Autor Beitrag
friesi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44

Windows XP SP2
VS 2005
BeitragVerfasst: Mo 22.07.02 23:08 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 307

Win XP Prof, Linux, Win 7
D5 Prof, D7 Architect, D2005 Architect, D2007 Architect
BeitragVerfasst: Di 23.07.02 00: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.

:)

_________________
Alfons Grünewald
b.brecht
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81



BeitragVerfasst: Di 23.07.02 01:56 
Kannst du nciht einfach die BitMap in ein TImage laden (Image1.Picture.LoadFromFile('test.bmp');) .
Dann einfach so:
ausblenden Quelltext
1:
2:
3:
Image1.Picture.Bitmap.Width:=50;
Image1.Picture.Bitmap.Height:=50;
Image1.Picture.SaveToFile('C:\test2.bmp');
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Di 23.07.02 09: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:

ausblenden 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

_________________
Viele Grüße
Jakob
b.brecht
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81



BeitragVerfasst: Di 23.07.02 10: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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Di 23.07.02 12: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

Zitat:
Teste es!


Mach ich.

_________________
Viele Grüße
Jakob
friesi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44

Windows XP SP2
VS 2005
BeitragVerfasst: Di 23.07.02 12: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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44

Windows XP SP2
VS 2005
BeitragVerfasst: Di 23.07.02 14: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 :)

ausblenden 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.

ausblenden 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 :)