| Autor |
Beitrag |
joje
      
Beiträge: 25
win xp, linux suse 9.1
|
Verfasst: Di 25.01.05 21:32
hi,
ich habe ein problem, wenn ich in einem program einer Tjpegimage variable ein bild zuweise, und danach dieser variable wieder ein bild zuweisen will, geht das nicht, das heißt das alte bild bleibt immernoch auf der variable und es kommt nicht das neue bild, weiß vielleicht jemand wodran das liegen kann?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var i: Integer; begin OpenDialog1.Options := [ofHideReadOnly,ofAllowMultiSelect]; if OpenDialog1.Execute then begin for i := 0 to OpenDialog1.Files.Count-1 do begin ListBox1.Items.Add(ExtractFileName (OpenDialog1.Files.Strings[i])); jpg.LoadFromfile ('D:\temp-fotos\'+ Listbox1.Items.Strings[a]); jpg.savetofile ('D:\fotos\'+ Listbox1.Items.Strings[a]); end; |
in dem listbox wird bei diesem beispiel aber immer der richtige dateiname geschrieben, das bild wird auch immer unter einem anderen dateinamen abgespeichert
gruß jens
|
|
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 25.01.05 21:37
Lösche mal überall das ".strings" raus und denk dran, dass du immer die gleiche Laufvariable "i" verwenden solltest. Die Bedeutung von a kann ich mir nicht erschließen 
|
|
joje 
      
Beiträge: 25
win xp, linux suse 9.1
|
Verfasst: Di 25.01.05 21:40
geillo dangööö es klappt!!! aber warum...
jens
|
|
joje 
      
Beiträge: 25
win xp, linux suse 9.1
|
Verfasst: Di 25.01.05 21:53
na toll jetz geht das ganze damit weiter das ich dans problem noch mit einem bmp haben, is das die lösung auch so einfach? muss ich da jetzt nen neuen thread aufmachen? is doch eigentlich das gleiche
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| var i: Integer; begin OpenDialog1.Options := [ofHideReadOnly,ofAllowMultiSelect]; if OpenDialog1.Execute then begin for i := 0 to OpenDialog1.Files.Count-1 do begin ListBox1.Items.Add(ExtractFileName (OpenDialog1.Files[i])); jpg.LoadFromfile (OpenDialog1.Files[i]); with b2 do begin b2.width := jpg.Width div 8; b2.height := jpg.height div 8; Canvas.StretchDraw(rect ( 0,0, (jpg.Width div 8),(jpg.height div 8)), jpg); end; jp.Assign(b2); jp.savetofile ('D:\fotos\'+ Listbox1.Items[i]); a := a+1; bmp.FreeImage; b2.FreeImage; canvas.Refresh; |
|
|
Lossy eX
      
Beiträge: 1048
Erhaltene Danke: 4
|
Verfasst: Mi 26.01.05 06:36
Also ich denke mal, wenn du eine genaue Problembeschreibung postest, dann kann auch geholfen werden. Aber mit dem Text "ich habe ein Problem. Wer hat eine Lösung?" können wir überhaupt nichts anfangen. Zusätzlich dazu wäre es nicht schlecht, wenn eine Variablendeklaration mit postest. Oder zu mindest in deinem Posting erwähnst welchen Typ die Variablen haben. Einige wie I sind ja selbstredent. Aber bei b2 musste ich gerade ein bisschen raten. Tippe aber mal darauf, dass es ein TBitmap ist.
Und was funktioniert denn nicht? Was soll dein Quellcode machen und was tut er statt dessen.
_________________ Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
|
|
joje 
      
Beiträge: 25
win xp, linux suse 9.1
|
Verfasst: Mi 26.01.05 17:13
ja ok hier nochmal genauer
Delphi-Quelltext 1: 2: 3:
| jpg, jp, bild: TjpegImage; bmp, b2, anzeige : Tbitmap; a : Integer; |
eigentlich soll dieser ablauf ein bild laden es verkleinern und wieder speichern, und ein neues bild laden, verkleinern...
aber scheinbar habert es dabei das das bild nach dem ersten mal nicht erneuert werden kann, also wird nur das alte bild unter dem gleichen namen abgespechert. wenn man stadt "jp" "jpg" einsetzt wird das bild demzufolge mit jedem mal kleiner. also ging ich davon aus das das jpg nicht neu geladen wird. das komische ist aber wenn ich das bild anch dem laden direkt wieder speichere speichert er das richtige bild, also immer ein andere und nicht immer das gleiche, also muss der fehler irgendwo dahinter liegen. es ist also gar nicht klar wo genau die sache jetz dran scheitert, es wird scheinbar immer die richtige datei geladen aber nicht weiterverarbeitet(!!)
|
|
joje 
      
Beiträge: 25
win xp, linux suse 9.1
|
Verfasst: Mi 26.01.05 19:22
so nach mehreren tests weiß ich jetzt genau wo das problem liegt:
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: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| var i: Integer; begin OpenDialog1.Options := [ofHideReadOnly,ofAllowMultiSelect]; if OpenDialog1.Execute then begin for i := 0 to OpenDialog1.Files.Count-1 do begin ListBox1.Items.Add(ExtractFileName (OpenDialog1.Files[i])); jpg.LoadFromfile (OpenDialog1.Files[i]);
if i = 0 then begin with b2 do begin b2.width := jpg.Width div 8; b2.height := jpg.height div 8; Canvas.StretchDraw(rect ( 0,0, (jpg.Width div 8),(jpg.height div 8)), jpg); end; jp.Assign(b2); jp.savetofile ('D:\fotos\'+ (ExtractFileName OpenDialog1.Files[i]))); end;
if i = 1 then begin with bmp do begin bmp.width := jpg.Width div 8; bmp.height := jpg.height div 8; Canvas.StretchDraw(rect ( 0,0, (jpg.Width div 8),(jpg.height div 8)), jpg); end; image2.Picture.Bitmap := bmp; label1.Caption:= 'bäää'; foto.assign(bmp); foto.savetofile ('D:\fotos\'+ (ExtractFileName (OpenDialog1.Files[i]))); end;
a := a+1; bmp.FreeImage; canvas.Refresh; end; end; end; |
mit diesem test habe ich herausbekommen, das neue bild garnicht erst geladen wird.
Zuletzt bearbeitet von joje am Mi 26.01.05 19:39, insgesamt 3-mal bearbeitet
|
|
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 26.01.05 19:31
Also bevor du dir nicht mal die beiden folgenden einfachen Formatierungsregeln merkst, wird die das Groß der Community keine Aufmerksamkeit schenken:
1. Jedes end ist genauso weit eingerückt wie sein zugehöriges begin.
2. Alle Befehle in einem begin-end-Block sind ein Stück weiter eingerückt als das begin und das end.
|
|
joje 
      
Beiträge: 25
win xp, linux suse 9.1
|
Verfasst: Mi 26.01.05 19:36
|
|