AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bild richtig laden und löschen?
Thema durchsuchen
Ansicht
Themen-Optionen

Bild richtig laden und löschen?

Ein Thema von OrNEC · begonnen am 9. Mär 2013 · letzter Beitrag vom 10. Mär 2013
Antwort Antwort
OrNEC

Registriert seit: 6. Nov 2009
493 Beiträge
 
FreePascal / Lazarus
 
#1

Bild richtig laden und löschen?

  Alt 9. Mär 2013, 16:21
Hallo Jungs,

hab folgendes Problem. Ich hab zwei Buttons für das Laden und Löschen eines Bildes. Ich kann ein Bild wählen, wenn es nicht das richtige ist, wieder laden, also da klappt alles, wenn ich aber ein geladenes Bild lösche und dann wieder ein Bild wähle, kracht es, ein Speicherzugriffsfehler.

Ich vermute, dass das an der Freigabe des TFileStream (fs, ist FileStream und globale Variable) liegt. Kapier aber nicht, wie ich das richtig machen soll. Danke euch!

Delphi-Quellcode:
// Bild laden
procedure TForm2.PictureBitBtnClick(Sender: TObject);
var jpeg: TJPEGImage;
begin
  if fs<>nil then fs.Free;

  if OpenPictureDialog1.Execute then
  begin

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

      if (((jpeg.Width>100) and (jpeg.Width<200)) or ((jpeg.Height>100) and (jpeg.Height<200))) then
      begin
        fs := TFileStream.Create(OpenPictureDialog1.FileName, fmOpenRead);
        PictureImage.Picture.Graphic := jpeg;
      end else MessageDlg('Das Bildformat entspricht nicht den Anforderungen!' + CHR(13) +
      'Bitte wählen Sie das Format von min. 100x100 und max. 200x200 Pixel.', mtError, [mbOK], 0);

    finally
      jpeg.Free;
    end;
  end;

end;
Und hier das löschen des Bildes

Delphi-Quellcode:
// Bild löschen
procedure TForm2.PictureDeleteBitBtnClick(Sender: TObject);
begin
  fs.Free;
  PictureImage.Picture := nil;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Bild richtig laden und löschen?

  Alt 9. Mär 2013, 16:49
Die Zuweisung wäre
PictureImage.Picture.Assign(jpeg); den Sinn des Filestreams kann ich nicht erkennen, der läuft hier völlig nutzlos mit.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
OrNEC

Registriert seit: 6. Nov 2009
493 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Bild richtig laden und löschen?

  Alt 9. Mär 2013, 17:18
Die Zuweisung wäre
PictureImage.Picture.Assign(jpeg); den Sinn des Filestreams kann ich nicht erkennen, der läuft hier völlig nutzlos mit.
Ist für die DB, fs wird als BLOB an anderer Stelle in die DB geschrieben.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Bild richtig laden und löschen?

  Alt 9. Mär 2013, 18:22
Diese Prüfung der Bildgrösse ist ziemlich schlecht gelöst.
Mal angenommen der Benutzer hat ein Bild 240 * 180 und er kann sich auf den Kopf stellen, aber er bekommt das Bild nicht in die DB.
Was mag der User wohl denken?
Wird er das Programm gut finden oder sich ärgern?
Natürlich wird er sich über das dumme Programm ärgern denn der User wird regelrecht entmündigt.

Für den Programmierer heisst das er darf eine Warnung ausgeben, aber er darf den User nicht blockieren.
Code:
Warnung

Das Bild C:\test\urlaub.jpg hat eine Grösse von 240 * 180.
Mindestgrösse 100*100, Maximalgrösse 200*200
    [OK]    [Ignorieren]
Und dann sollte die Prüfung in einer eigenen Funktion stattfinden, anstatt alles in PictureBtnClick zu erledigen.
Dies verbessert die esbarkeit und die Erweiterungsfähigkeit des Codes.
Delphi-Quellcode:
function TForm1.ImageBoundsOK(const filename:string; width,height:Integer):Boolean;
begin
  // jenachdem wie gross das Bild ist wird eine Warnung angezeigt oder nicht
  // der Benutzer darf die Warnung ignorieren
  // Result = True => Bildgrösse ist in Ordnung (oder Benutzer hat Warnung ignoriert)
  // Result = False => Bildgrösse nicht OK
  //
end;

Geändert von sx2008 ( 9. Mär 2013 um 18:38 Uhr)
  Mit Zitat antworten Zitat
OrNEC

Registriert seit: 6. Nov 2009
493 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Bild richtig laden und löschen?

  Alt 9. Mär 2013, 18:26
Plane das später in eine eigene Funktion packen, da aktuell sich vieles ändern kann. Das Bild werde ich später skalieren, die Fehlermeldung verschwindet ganz.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

AW: Bild richtig laden und löschen?

  Alt 10. Mär 2013, 00:02
Hallo Jungs,

hab folgendes Problem. Ich hab zwei Buttons für das Laden und Löschen eines Bildes. Ich kann ein Bild wählen, wenn es nicht das richtige ist, wieder laden, also da klappt alles, wenn ich aber ein geladenes Bild lösche und dann wieder ein Bild wähle, kracht es, ein Speicherzugriffsfehler.
Kein Wunder. Beim löschen rift du free auf, setzt die Variable aber nicht auf nil.
Beim neuen erstellen prüfst du auf nil (was eh überflüssig ist) und ruft dann free auf. Damit versuchst du, den fs ein zweites Mal freizugeben. Das scheitert
Entweder noch ein fs:=nil beim löschen, oder das fs.Free aus dem löschen Button entfernen.
  Mit Zitat antworten Zitat
OrNEC

Registriert seit: 6. Nov 2009
493 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Bild richtig laden und löschen?

  Alt 10. Mär 2013, 10:17
Scheint zu funktionieren, danke! Aber ich glaube das ist noch nicht alles, melde mich später noch ein mal.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz