Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Speichern der Canvas (https://www.delphipraxis.net/163701-speichern-der-canvas.html)

Blubbel 12. Okt 2011 08:32

Delphi-Version: 5

Speichern der Canvas
 
Hallo und guten Morgen.

Es tut mir wirklich leid dass ich euch wieder mal Störe und vielleicht auch nerve.
Ich habe jetzt folgendes Problem:
Ich möchte den Grapgen den ich gezeichnet habe Speichern, und Zwar so, dass ich mir den Speichpfad immer wieder selber aussuchen kann. Habe es bis jetzt so lösen können, dank google :):
Delphi-Quellcode:
procedure TForm1.btnSaveClick(Sender: TObject);
var
  Bitmap : TBitmap;
begin
  if SaveDialog1.Execute then
    begin
      Bitmap:=TBitmap.Create;
      Try
        Bitmap.Width:=Image1.ClientWidth;
        Bitmap.Height:=Image1.ClientHeight;
        BitBlt(Bitmap.Canvas.Handle,0,0,Bitmap.Width,Bitmap.Height,
               Image1.Canvas.Handle,0,0,SRCCOPY);
        Bitmap.SaveToFile(SaveDialog1.FileName + '.bmp');
      Finally
        Bitmap.Free;
      end;
    end;
end;
Nur gibt mir der Compiler immer wieder an, dass SaveDialog.Execute ein undefinierter Bezeichner ist... Auch bei SaveDialog alleine.

Liebe Grüße

Luckie 12. Okt 2011 08:35

AW: Speichern der Canvas
 
Befindet sich denn eine SaveDialog Komponente auf deinem Formular?

Blubbel 12. Okt 2011 08:38

AW: Speichern der Canvas
 
Wie auf meinem Formular? muss ich das mit ins Formcreate schreiben??

DeddyH 12. Okt 2011 08:39

AW: Speichern der Canvas
 
Komponentenpalette - Reiter Dialoge - TSaveDialog auswählen und aufs Formular damit.

Blubbel 12. Okt 2011 08:50

AW: Speichern der Canvas
 
Sogar dafür bin ich zu doof -.-

DeddyH 12. Okt 2011 08:52

AW: Speichern der Canvas
 
Wie bringst Du denn einen Button oder ein Edit auf Dein Formular? Genauso geht das auch mit dem Dialog, das ist eine ganz normale Komponente.

Blubbel 12. Okt 2011 08:53

AW: Speichern der Canvas
 
ok habs jetzt ausn internet gesucht.... Jetzt weiß ich auch was idt, wenn ihr vom Formular sprecht :)
Zitat:

Genauso geht das auch mit dem Dialog, das ist eine ganz normale Komponente.
Naja, Jetzt weiß ich es ja auch... Habs nur nicht in meiner Palette gefunden und habe das ganze Programm durchsucht. ABer ich habe es ja jetzt. Mal gucken ib er auch Speichert

DeddyH 12. Okt 2011 08:55

AW: Speichern der Canvas
 
Hättest Du doch einfach nachgefragt :zwinker:

Blubbel 12. Okt 2011 08:57

AW: Speichern der Canvas
 
Hmmm... jetzt gibts eine Zugriffsverletzung...?

DeddyH 12. Okt 2011 08:57

AW: Speichern der Canvas
 
Und wo genau?

Blubbel 12. Okt 2011 08:58

AW: Speichern der Canvas
 
Delphi-Quellcode:
 if SaveDialog1.Execute then
das markiert er rot wenn ich auf Anhalten klicke

DeddyH 12. Okt 2011 09:06

AW: Speichern der Canvas
 
Das verstehe ich im Moment nicht, Dein Dialog wird ja wohl SaveDialog1 heißen, sonst würde ja gar nicht erst kompiliert werden. Bringt es etwas, wenn Du den Code ausschneidest, kompilierst und anschließend wieder einfügst?

Blubbel 12. Okt 2011 09:09

AW: Speichern der Canvas
 
Tut sich nichts.... wenn ich den im laufenden Programm wieder einfüge und dann Klicke macht er garnichts
Zitat:

---------------------------
Fehler
---------------------------
Feld Form1.SaveDialog1 besitzt keine entsprechende Komponente. Soll die Deklaration entfernt werden?
---------------------------
Ja Nein Abbrechen Hilfe
---------------------------
<-Beim Kompilieren sagt er mir das hier

DeddyH 12. Okt 2011 09:18

AW: Speichern der Canvas
 
Ist die Komponente denn auf dem Formular zu sehen? Im Moment scheint es eher so, als hättest Du sie händisch in die Unit eingefügt.

Blubbel 12. Okt 2011 09:23

AW: Speichern der Canvas
 
Zitat:

Zitat von DeddyH (Beitrag 1129954)
Ist die Komponente denn auf dem Formular zu sehen? Im Moment scheint es eher so, als hättest Du sie händisch in die Unit eingefügt.

Beides ja, ich hab diese Komponente nicht gefunden... Hatte ich das nicht schon geschrieben:gruebel:

Ich find die nicht -.- och manno:(

DeddyH 12. Okt 2011 09:25

AW: Speichern der Canvas
 
Schau doch in die Komponentenpalette, da muss es einen Reiter "Dialoge" geben. Auf diesem sollte der SaveDialog zu finden sein. Ist der Reiter nicht da, sind vermutlich nicht alle Packages geladen.

Blubbel 12. Okt 2011 09:28

AW: Speichern der Canvas
 
Nee, woher bekomm ich das jetzt?? das ist doch echt zum :kotz:

Blubbel 12. Okt 2011 09:30

AW: Speichern der Canvas
 
Habe es gefunden... er hat jetzt eine neue Unit geöffnet. Ist das so richtig?

DeddyH 12. Okt 2011 09:31

AW: Speichern der Canvas
 
Falls Du den Begriff Komponentenpalette falsch verstanden haben solltest, findest Du hier eine Abbildung (Delphi 1, so wie es aussieht, macht aber nix). Dort ist auch der Reiter "Dialoge" zu sehen.

[edit] Neue Unit? Nee, das sollte eigentlich nicht sein. Nimm doch den Dialog wie einen Button o.ä. einfach und platziere ihn auf dem Formular, das ist alles. [/edit]

Blubbel 12. Okt 2011 09:37

AW: Speichern der Canvas
 
Man bin ich bescheuert!!!!
Habs jetzt... und es Funktioniert auch!!

Wie kann ein Mensch nur sooo bescheuert sein. Habe immer inner Palette geguckt während ich im QT war :oops:sowas dummes danke Deddyh

Blubbel 12. Okt 2011 10:45

AW: Speichern der Canvas
 
Gibt es dieses SaveDialog auch fürs Speichern von JPG-Dateien?
Will das irgendwie umändern dass es als jpg gespeichert wird

Luckie 12. Okt 2011 10:47

AW: Speichern der Canvas
 
Der Dialog hat mit dem Dateiformat nichts zu tun. Er dient nur dazu einen Pfad und Dateinamen auszuwählen, nicht mehr und nicht weniger.

Wenn du das Bitmap als JPEG speichern willst, musst du es vorher in das JPEG Format umwandeln. Dazu solltest du genug Beispielcode hier im Forum finden.

Blubbel 12. Okt 2011 10:48

AW: Speichern der Canvas
 
OK, dann versuche ich es mal... dann brauch ich ja auch keine extra Funktion oder Prozedur wenn ich das einfach "ersetzen" kann sozusagen, habe ich das so richtig verstanden? also nach dem Code seh ich mich gleich mal um :)

PS: ja umwandeln... also doch eine extra Sache.... also ist der erste satz von diesem Beitrag mal bitte zu übersehen ;)

Blubbel 12. Okt 2011 12:28

AW: Speichern der Canvas
 
Kann man das nicht einfach so machen:
Delphi-Quellcode:
procedure TForm1.btnSaveClick(Sender: TObject);
var
//  Bitmap : TBitmap;
  jpg: TJpegImage;
begin
  if SaveDialog1.Execute then
    begin
      jpg:=TJpegImage.Create;
      Try
        jpg.Width:=Image1.ClientWidth;
        jpg.Height:=Image1.ClientHeight;
        BitBlt(jpg.Canvas.Handle,0,0,jpg.Width,jpg.Height, //jpg.Canvas.Handle geht nicht
               Image1.Canvas.Handle,0,0,SRCCOPY);
        jpg.SaveToFile(SaveDialog1.FileName + '.jpg');
      Finally
        ShowMessage('Gespeichert!');
        jpg.Free;
      end;
    end;
end;
Wobei
Delphi-Quellcode:
jpg.Canvas.Handle
niht funkrioniert!?

Union 12. Okt 2011 12:36

AW: Speichern der Canvas
 
Statt dem BitBlt mach mal einfach:
Delphi-Quellcode:
jpg.Assign(Image1.Picture.Bitmap);

Blubbel 12. Okt 2011 12:41

AW: Speichern der Canvas
 
Aber was pasiert mit
Delphi-Quellcode:
jpg.Canvas.Handle
? Muss das ganz weg?

Habe es jetzt so
Delphi-Quellcode:
jpg.Assign(Image1.Picture.Bitmap)(jpg.Canvas.Handle,0,0,jpg.Width,jpg.Height, //jpg.Canvas.Handle geht nicht
               Image1.Canvas.Handle,0,0,SRCCOPY);

Union 12. Okt 2011 12:45

AW: Speichern der Canvas
 
Sorry, ich meinte natürlich den ganzen BitBlt. Auch die beiden Zeilen mit der Größenzuweisung können weg.

Blubbel 12. Okt 2011 12:47

AW: Speichern der Canvas
 
Alles klärchen:thumb::thumb:

Blubbel 12. Okt 2011 12:50

AW: Speichern der Canvas
 
Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EInvalidGraphicOperation mit der Meldung 'Die Größe einer JPEG-Grafik kann nicht verändert werden' aufgetreten.
... habs auch schon verändert, dass er die Größe vom Image nimmt aber das will er genauso wenig

Neutral General 12. Okt 2011 12:51

AW: Speichern der Canvas
 
Mal dein Canvas auf ein Bitmap, erstelle ein JPEG, Assigne das Bitmap und speicher das JPEG.

DeddyH 12. Okt 2011 12:55

AW: Speichern der Canvas
 
Ungetestet:
Delphi-Quellcode:
procedure TForm1.btnSaveClick(Sender: TObject);
var
  jpg: TJpegImage;
begin
  if SaveDialog1.Execute then
    begin
      jpg := TJpegImage.Create;
      Try
        jpg.Assign(Image1.Picture.Bitmap);
        jpg.SaveToFile(ChangeFileExt(SaveDialog1.FileName, '.jpg'));
        ShowMessage('Gespeichert!');
      Finally
        jpg.Free;
      end;
    end;
end;

Blubbel 12. Okt 2011 12:58

AW: Speichern der Canvas
 
Ganz genau das wollte ich... Naja wäre nur ein kleiner trotzdem schwerer Schritt gewesen!
Wüsste echt nicht was ich ohne euch machen sollte!!

DANKE EUCH!


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz