Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Zwei Probleme mit OpenPictureDialog und SavePictureDialog (https://www.delphipraxis.net/157242-zwei-probleme-mit-openpicturedialog-und-savepicturedialog.html)

delphianfänger123 4. Jan 2011 20:15

Zwei Probleme mit OpenPictureDialog und SavePictureDialog
 
Hallo!

Ich habe erneut ein bzw. zwei riesige Probleme, bei denen ihr mir hoffentlich helfen könnt!
Mein Zeichenpogramm hat einmal diese Prozedur
Code:
procedure TForm1.Button5Click(Sender: TObject);
begin // .bmp-Bild laden
 if OpenPictureDialog1.Execute then
     Bitmap:=TBitmap.create;
     Bitmap.Width:=704;
     Bitmap.Height:=603;

     Bitmap.Canvas.Brush.Color:=ColorDialog1.Color;
     Bitmap.Canvas.Fillrect(Rect(0,0,704,603));
     Bitmap.LoadFromFile(OpenPictureDialog1.FileName);

  BitBlt(Paintbox1.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, Bitmap.Canvas.Handle, 0, 0, SrcCopy);
  Bitmap.Free;


end;
mit der man ein bmp-Bild laden kann und diese
Code:
procedure TForm1.Button4Click(Sender: TObject);
begin // Speichert den Inhalt der Paintbox an eine beliebige Stelle
 if SavePictureDialog1.Execute then
    Bitmap:=TBitmap.Create;
    Bitmap.PixelFormat := pf32bit;
    Bitmap.Width:=Paintbox1.Width;
    Bitmap.Height:=Paintbox1.Height;

  Bitmap.Canvas.CopyRect(Bounds(0,0,bitmap.Width, Bitmap.Height),
   PaintBox1.Canvas, PaintBox1.ClientRect);

  Bitmap.SaveToFile(SavePictureDialog1.FileName);
  Bitmap.Free;
end;
mit der man das Gemalte Kunstwerk speichern kann.

Nun habe ich folgende Probleme:
1. Wenn ich beim "Bild laden" bzw. "Bild speichern" auf abbrechen klicke kommt folgende Fehlermeldung:
Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project2.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 0042217C in Modul 'Project2.exe'. Lesen von Adresse 00000028'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
2.Wenn ich ein Bild speichere, dann wird es nicht als .bmp-Bild gespeichert. Wie bekomme ich es hin, das Bild als .bmp zu speichern?

Für Hilfe wäre ich sehr dankbar! :)

mkinzler 4. Jan 2011 20:18

AW: Zwei Probleme mit OpenPictureDialog und SavePictureDialog
 
Bei mehrern Befehlen im then oder else Teil diese mit begin..end umschliessen.

Wie ist die Endung des Dateinamnes?

Luckie 4. Jan 2011 20:20

AW: Zwei Probleme mit OpenPictureDialog und SavePictureDialog
 
Zusammengehörede Blöcke werden in Delphi mit begin und end umschlossen. Und jetzt guck dir deinen Quellcode noch mal an. Nach ausführen der Dialoge soll doch wohl mehr passieren als:
Delphi-Quellcode:
Bitmap:=TBitmap.create;
oder?

delphianfänger123 4. Jan 2011 20:23

AW: Zwei Probleme mit OpenPictureDialog und SavePictureDialog
 
Danke für die schnelle Antwort!

Das Ende des Dateinamens...naja, denn gibts nicht wirklich. Ich die Datei nur als weißes Blatt, der Dateityp ist laut Eigenschaften einfach nur "Datei".
Ich kann dieses Ding aber mit z.B. Paint öffnen!

mkinzler 4. Jan 2011 20:24

AW: Zwei Probleme mit OpenPictureDialog und SavePictureDialog
 
Du kannst diesen ja vorgeben. und ggf. die passende Endung anhängen

delphianfänger123 4. Jan 2011 20:46

AW: Zwei Probleme mit OpenPictureDialog und SavePictureDialog
 
Hm so weit so gut, ich weiß jetzt wo der Fehler liegt, aber ich weiß nicht so recht wie ich den Quellcode in die verschiedenen Blöcke einteilen soll :?

Code:
procedure TForm1.Button5Click(Sender: TObject);
begin // .bmp-Bild laden
 if OpenPictureDialog1.Execute then
  begin
     Bitmap:=TBitmap.create; // Hier weise ich der var Bitmap ja ihre Eigenschaften zu, oder?
     Bitmap.Width:=704;
     Bitmap.Height:=603;
 
     Bitmap.Canvas.Brush.Color:=ColorDialog1.Color; // Hiermit wird der Hintergrund übermalt
     Bitmap.Canvas.Fillrect(Rect(0,0,704,603));
     
     Bitmap.LoadFromFile(OpenPictureDialog1.FileName); // Hiermit lade ich die das Bild in die var Bitmap
  end;
   
        begin
          BitBlt(Paintbox1.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, Bitmap.Canvas.Handle, 0, 0, SrcCopy); // Das ist die Anweisung zum   Zeichnen des bmp-Bildes auf die Paintbox1
        end;
          begin
            Bitmap.Free; // Und hiermit leere ich schließlich die var Bitmap
          end;

end;
Is das so richtig? :pale:

Und mit der Dateienendung: Kann ich auch irgendwo festlegen, dass es von Anfang an eine bmp-Datei ist und nichts anderes sein kann und das ich nicht erst die Endung manuell hinzufügen muss?

Schonmal danke im Voraus!

mkinzler 4. Jan 2011 20:56

AW: Zwei Probleme mit OpenPictureDialog und SavePictureDialog
 
Jein, du musst nur Blöcke bilden, wenn diese notwendig sind.
Zudem vermute ich, das der komplette Code nur ausfeführt werden soll, wenn ein Bild im Dialog ausgewählt wurde

Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
begin // .bmp-Bild laden
   if OpenPictureDialog1.Execute then
   begin
       Bitmap:=TBitmap.create; // Hier weise ich der var Bitmap ja ihre Eigenschaften zu, oder?
       Bitmap.Width:=704;
       Bitmap.Height:=603;
 
       Bitmap.Canvas.Brush.Color:=ColorDialog1.Color; // Hiermit wird der Hintergrund übermalt
       Bitmap.Canvas.Fillrect(Rect(0,0,704,603));
     
       Bitmap.LoadFromFile(OpenPictureDialog1.FileName); // Hiermit lade ich die das Bild in die var Bitmap
       BitBlt(Paintbox1.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, Bitmap.Canvas.Handle, 0, 0, SrcCopy); // Das ist die Anweisung zum  Zeichnen des bmp-Bildes auf die Paintbox1

       Bitmap.Free; // Und hiermit leere ich schließlich die var Bitmap
   end;
end;

delphianfänger123 4. Jan 2011 21:03

AW: Zwei Probleme mit OpenPictureDialog und SavePictureDialog
 
Okay super! Vielen Dank!

Bliebe nur noch das Problem mit dem abgespeicherten Bild, das keine .bmp ist. Die Datei ist zwar nicht unbrauchbar, dennoch ist es ziemlich unkomfortabel, sie erst durch manuelles Eingreifen zu einer .bmp.Datei zu machen! Wenn da jemand noch ne Lösung hätte wäre ich sehr sehr dankbar!

mkinzler 4. Jan 2011 21:04

AW: Zwei Probleme mit OpenPictureDialog und SavePictureDialog
 
Schau dir mal ChangeFileExt() an

himitsu 4. Jan 2011 21:06

AW: Zwei Probleme mit OpenPictureDialog und SavePictureDialog
 
Wenn du das Bild über Bitmap (TBitmap) speicherst dann ist die Datei garantiert ein Bitmap.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:08 Uhr.
Seite 1 von 2  1 2      

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