Entwickler-Ecke
Dateizugriff - Bilder laden/speichern
BM_90 - Fr 14.12.07 16:02
Titel: Bilder laden/speichern
Ich muss mehrere Bilder auf einmal in mehreren TIimages öffnen, hab aber keine Ahnung, wie das geht...
außerdem muss ich bei den Bildern die Größe anpassen...
das ist der Quelltext den ich dazu jetzt schon hab, kann mir jemand verraten, in wie fern ich den umschreiben muss??
laden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.AusDatei1Click(Sender: TObject); begin if not list.execute then exit; image1.Picture.LoadFromFile(list.FileName); end; |
speichern:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.Exportieren1Click(Sender: TObject); begin if not savepicturedialog1.execute then exit; image1.Picture.Graphic.savetoFile(list.FileName); end; |
Moderiert von
Narses: Delphi-Tags hinzugefügt
mister_x - Fr 14.12.07 18:20
so kannst du die bilder laden
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| var Images : Array[0..100]of TImage; ImagesCount : Integer=0;
procedure TForm1.BitBtn1Click(Sender: TObject); var I : Integer; begin if OpenDialog.Execute then begin for I:=0 to OpenDialog.Files.Count-1 do if I<100 then begin Images[I] := TImage.Create(Self); Images[I].Parent := Form1; Images[I].Left := (I mod 10)*(Width div 10); Images[I].Width := Width div 10; Images[I].Height := Height div 10; Images[I].Top := Trunc(I/10)*(Width div 10);
Images[I].Stretch := true; Images[I].Proportional := true;
Images[I].Picture.LoadFromFile(OpenDialog.Files.Strings[I]);
Inc(ImagesCount); end; end; end; |
beim speichern kommts drauf an wie dus speichern willst generell
Delphi-Quelltext
1: 2: 3: 4:
| for I:=0 to ImagesCount-1 do begin Images[I].Picture.SaveToFile(Verzeichnis+'Bild['+inttostr(I)+'].bmp'); end; |
Mister_X
BM_90 - Mo 17.12.07 15:05
Vieln dank für deine hilfe. warn zwar n paar kleine fehler drin, aber naja...
hab jetz im griff. hab mir das so umgefummelt, dass ich mit nem savepicturedialog in nem beliebign verzeichnis speichern kannst. hab nur noch das problem, dass ich dass nich immer mit speichern unter.. machn will. will dass der die automatisch unter nem vorher per edit eingegebenen namen mit durchnummerierung die datein in nem bestimmtn verzeichnis speichert. hab außerdem noch das problem, dass ich im savepicturedialog immer nur eine datei markiern kann. wie kann ich das ändern?
kannste mir da vllt nochmal hefn??
Martin1966 - Mo 17.12.07 17:07
BM_90 hat folgendes geschrieben: |
will dass der die automatisch unter nem vorher per edit eingegebenen namen mit durchnummerierung die datein in nem bestimmtn verzeichnis speichert. |
Wo genau liegt das Problem?
BM_90 hat folgendes geschrieben: |
hab außerdem noch das problem, dass ich im savepicturedialog immer nur eine datei markiern kann. wie kann ich das ändern? |
Aus welchem Grund sollte man mehrere Dateinamen über den TSavePictureDialog festlegen können?
Lg, Martin
PS: Du solltest dir etwas mehr Mühe beim schreiben deiner Nachrichten geben... die sind nämlich sehr schwer zu lesen!
mister_x - Mo 17.12.07 17:25
BM_90 hat folgendes geschrieben: |
Vieln dank für deine hilfe. warn zwar n paar kleine fehler drin, aber naja...
hab jetz im griff. hab mir das so umgefummelt, dass ich mit nem savepicturedialog in nem beliebign verzeichnis speichern kannst. hab nur noch das problem, dass ich dass nich immer mit speichern unter.. machn will. will dass der die automatisch unter nem vorher per edit eingegebenen namen mit durchnummerierung die datein in nem bestimmtn verzeichnis speichert. hab außerdem noch das problem, dass ich im savepicturedialog immer nur eine datei markiern kann. wie kann ich das ändern?
kannste mir da vllt nochmal hefn?? |
wo warn da fehler drin???
ich hab doch oben geschrieben wie du speichern kannst wo ist da dein problem???
un bei deiner anderen frage schließ ich mich ma Martin 1966 an
BM_90 - Mo 17.12.07 17:33
naja, ich will halt mehrere bilder auf einmal öffnen...
un wegen der fehler: beim kopieren von dem quelltext, hat der son [color] mit reingemacht, natürlich hat sich delphi deswegen beim compilieren beschwert.
und ich wundere mich... schön blöd
mister_x - Mo 17.12.07 17:36
BM_90 hat folgendes geschrieben: |
naja, ich will halt mehrere bilder auf einmal öffnen...
un wegen der fehler: beim kopieren von dem quelltext, hat der son [color] mit reingemacht, natürlich hat sich delphi deswegen beim compilieren beschwert.
und ich wundere mich... schön blöd |
ach es geht um den opendialog
gehste mal unter opendialog.options.allowmultiselect:=true;
Mister_X
BM_90 - Di 18.12.07 11:13
Vielen Dank mister_x!! Haut astrein hin. Jetz habe ich aber leider ein neues Problem. Wenn ich, sagen wir mal 5 Bilder öffne, soll er mir die Biler nebeneinander anordnen. Das macht er zwar, wenn ich jetzt aber nochträgllich nochmal welche öffne, läd der die zwar auch, legt sie aber über die vorher geladenen Bilder. Wie mache ich meinem Programm klar, dass er, wenn schon Bilder angezeigt werden, die neuen Bilder daneben anordnen soll??
Und mein zweites Problem ist, dass ich die Bilder per mausklick untendrunter nocheinmal vergrößert darstellen will, das wäre ja im Prinzip nicht das Problem, weil die TImages aber erst beim Laden der Bilder erstellt erstellt werden, habe ich leider nicht die geringste Ahnung, wie das geht. Ich hab es schonmal mit OnClick versucht, aber irgendwie bekomme ich es nicht auf die Reihe.
Ich weiß, ich beanspruche dich ganz schön, aber du scheinst wirklich Ahnung zu haben. Naja und das muss ich nunmal ausnutzen...
VIELEN DANK!
Martin1966 - Di 18.12.07 14:06
BM_90 hat folgendes geschrieben: |
Vielen Dank mister_x!! Haut astrein hin. Jetz habe ich aber leider ein neues Problem. Wenn ich, sagen wir mal 5 Bilder öffne, soll er mir die Biler nebeneinander anordnen. Das macht er zwar, wenn ich jetzt aber nochträgllich nochmal welche öffne, läd der die zwar auch, legt sie aber über die vorher geladenen Bilder. Wie mache ich meinem Programm klar, dass er, wenn schon Bilder angezeigt werden, die neuen Bilder daneben anordnen soll?? |
Am besten so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| var Images : Array[0..100]of TImage; ImagesCount : Integer=0;
procedure TForm1.BitBtn1Click(Sender: TObject); var I : Integer; begin if OpenDialog.Execute then begin for I:=0 to OpenDialog.Files.Count-1 do if ImagesCount<100 then begin Images[ImagesCount] := TImage.Create(Self); Images[ImagesCount].Parent := Form1; Images[ImagesCount].Left := (I mod 10)*(Width div 10); Images[ImagesCount].Width := Width div 10; Images[ImagesCount].Height := Height div 10; Images[ImagesCount].Top := Trunc(I/10)*(Width div 10);
Images[ImagesCount].Stretch := true; Images[ImagesCount].Proportional := true;
Images[ImagesCount].Picture.LoadFromFile(OpenDialog.Files.Strings[I]);
Inc(ImagesCount); end; end; end; |
BM_90 hat folgendes geschrieben: |
Und mein zweites Problem ist, dass ich die Bilder per mausklick untendrunter nocheinmal vergrößert darstellen will, das wäre ja im Prinzip nicht das Problem, weil die TImages aber erst beim Laden der Bilder erstellt erstellt werden, habe ich leider nicht die geringste Ahnung, wie das geht. Ich hab es schonmal mit OnClick versucht, aber irgendwie bekomme ich es nicht auf die Reihe. |
Warum sollte das da ein Problem geben? Zeig mal dein Sourcecode Ausschnitt wo du das im OnClick ausprobiert hast.
Lg Martin
BM_90 - Di 18.12.07 17:16
Dankeschön, aber genauso sieht mein Quelltext auch aus...
Wenn ich ein paar Bilder öffne (zB 3), öffnet der die 3 Bilder. Gehe ich dann nochmal auf öffnen und öffne wieder 3 Bilder (ist eigentlich egal wie viele), legt er die neuen einfach über die anderen, un nicht einfach daneben...
Ach ja: wegen dem OnClick. Davon hab ich nicht wirklich Ahnung. War nur so ein Versuch auf gut Glück. Ich hab dann wieder alles über den Haufen geschmissen, weil das nicht funktioniert hat...
mister_x - Di 18.12.07 17:32
BM_90 hat folgendes geschrieben: |
Dankeschön, aber genauso sieht mein Quelltext auch aus...
Wenn ich ein paar Bilder öffne (zB 3), öffnet der die 3 Bilder. Gehe ich dann nochmal auf öffnen und öffne wieder 3 Bilder (ist eigentlich egal wie viele), legt er die neuen einfach über die anderen, un nicht einfach daneben...
Ach ja: wegen dem OnClick. Davon hab ich nicht wirklich Ahnung. War nur so ein Versuch auf gut Glück. Ich hab dann wieder alles über den Haufen geschmissen, weil das nicht funktioniert hat... |
mach einfach
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.BitBtn1Click(Sender: TObject); var I , L : Integer; begin L := ImagesCount; if OpenDialog.Execute then begin for I:=L to L+OpenDialog.Files.Count-1 do if ImagesCount<100 then begin ... Images[ImagesCount].Picture.LoadFromFile(OpenDialog.Files.Strings[I-L]); Inc(ImagesCount); end; end; end; |
Mister_X
BM_90 - Di 18.12.07 17:47
SUPER!!!
Das gibt 2 Daum nach oben!
Martin1966 - Mi 19.12.07 14:00
BM_90 hat folgendes geschrieben: |
Dankeschön, aber genauso sieht mein Quelltext auch aus... |
Nein, sieht er nicht!
Deine Version
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm1.BitBtn1Click(Sender: TObject); var I : Integer; begin if OpenDialog.Execute then begin for I:=0 to OpenDialog.Files.Count-1 do if I<100 then begin Images[I] := TImage.Create(Self); Images[I].Parent := Form1; Images[I].Left := (I mod 10)*(Width div 10); Images[I].Width := Width div 10; Images[I].Height := Height div 10; Images[I].Top := Trunc(I/10)*(Width div 10); Images[I].Stretch := true; Images[I].Proportional := true; Images[I].Picture.LoadFromFile(OpenDialog.Files.Strings[I]);
Inc(ImagesCount); end; end; end; |
Meine Version
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm1.BitBtn1Click(Sender: TObject); var I : Integer; begin if OpenDialog.Execute then begin for I:=0 to OpenDialog.Files.Count-1 do if ImagesCount<100 then begin Images[ImagesCount] := TImage.Create(Self); Images[ImagesCount].Parent := Form1; Images[ImagesCount].Left := (I mod 10)*(Width div 10); Images[ImagesCount].Width := Width div 10; Images[ImagesCount].Height := Height div 10; Images[ImagesCount].Top := Trunc(I/10)*(Width div 10); Images[ImagesCount].Stretch := true; Images[ImagesCount].Proportional := true; Images[ImagesCount].Picture.LoadFromFile(OpenDialog.Files.Strings[I]);
Inc(ImagesCount); end; end; end; |
Siehst du den Unterschied?
Lg, Martin
BM_90 - Mi 19.12.07 14:17
Das ist aber im Prinzip das selbe, oder??
Martin1966 - Mi 19.12.07 14:23
Äh.. Die Variable I (welche lokal definiert ist) und die Variable ImagesCount (welche global definiert ist) haben doch völlig unterschiedliche Aufgaben, oder?
BM_90 - Mi 19.12.07 14:47
Ach ich weiß auch nicht, kann schon sein...
Martin1966 - Mi 19.12.07 15:30
Soll das jetzt ein Scherz sein? Wenn du keine Lust mehr hast dann sag bescheid. Dann versuche ich es erst gar nicht dir zu helfen.
BM_90 - Do 03.01.08 14:31
Hä?? Wie kommste denn jetz da drauf?
Narses - Do 03.01.08 14:40
Moin!
BM_90 hat folgendes geschrieben: |
Hä?? Wie kommste denn jetz da drauf? |
Das ist ganz leicht: du machst deutlich den Eindruck, dass es dir nicht wichtig ist (hier was zu lernen). :nixweiss: Das man da schonmal so Reaktionen wie von
Martin1966 "erntet", ist wohl normal. :)
Vorsorglich: bitte beim Thema bleiben. ;)
cu
Narses
BM_90 - Do 03.01.08 16:41
tut mir ja leid, ich bemühe mich ja wie sau, wenn ich dann aber trotzdem nicht weiter komme, verliere ich auch irgendwann die lust. außerdem hab ich selber kein internet, schreibe deshalb manchmal ewigkeiten nicht zurück...
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!