Entwickler-Ecke

Multimedia / Grafik - Grafik mit OpenDialog mehrfach laden?


AlexII - So 10.03.13 01:02
Titel: Grafik mit OpenDialog mehrfach laden?
Hallo Delphianer,

hab hier ein Problem, ich kann nicht Bilder mehrfach hintereinander laden. Ich meine eins, wenn das nicht schön ist, dann anderes usw. Es liegt wohl daran, dass fs belegt ist. fs ist ein FileStream was an anderer Stelle in die DB eingefügt wird, deswegen kann ich das nach dem Laden nicht! frei geben. Wenn ich das aber vor dem Laden des Bildes frei gebe bekomme nen Speicherzugriffsfehler. Keine Ahnung was ich machen soll, quelle mich schon den ganzen Tag.

Wäre für jede Hilfe dankbar.


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:
procedure TForm2.PictureBitBtnClick(Sender: TObject);
var jpeg: TJPEGImage;
begin
 
  if OpenPictureDialog1.Execute then
  begin

    jpeg := TJPEGImage.Create;
    try
      jpeg.LoadFromFile(OpenPictureDialog1.FileName);

      if (((jpeg.Width>100and (jpeg.Width<200)) or ((jpeg.Height>100and (jpeg.Height<200))) then
      begin
        fs := TFileStream.Create(OpenPictureDialog1.FileName, fmOpenRead);
        PictureImage.Picture.Assign(jpeg);
      end;

    finally
      jpeg.Free;
    end;
  end;

end;


Delete - So 10.03.13 03:39

- Nachträglich durch die Entwickler-Ecke gelöscht -


Mathematiker - So 10.03.13 09:13

Hallo,
was zwingt dich eigentlich, den Filestream schon in der Bildladeroutine zu erzeugen.
Du kannst doch einem String openpicturedialog1.filename übergeben und erst, wenn Du Dir mit dem Bild sicher bist, den Filestream erzeugen, also

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:
var bildname:string;
...
procedure TForm2.PictureBitBtnClick(Sender: TObject);
var jpeg: TJPEGImage;
begin
  if OpenPictureDialog1.Execute then
  begin
    jpeg := TJPEGImage.Create;
    try
      jpeg.LoadFromFile(OpenPictureDialog1.FileName);
      bildname:='';
      if (((jpeg.Width>100and (jpeg.Width<200)) or ((jpeg.Height>100and (jpeg.Height<200))) then
      begin
        bildname := OpenPictureDialog1.FileName;
        PictureImage.Picture.Assign(jpeg);
      end;
    finally
      jpeg.Free;
    end;
  end;
end;
... //erst wenn richtiges Bild gewählt
 fs := TFileStream.Create(bildname, fmOpenRead);

Außerdem kannst Du so auch am leeren String erkennen, ob das Bild den gewünschten Abmessungen entspricht.

Beste Grüße
Mathematiker