![]() |
Problem beim Speichern einer mit Canvas gezeichneten Grafik
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich programmiere mit Delphi 7 Personal Edition. Ich habe allerdings ein kleines Problem: (Man muss dazu sagen, dass ich ein Anfänger bin) Ich möchte eine mit Canvas, auf den Hintergrund gezeichnete Grafik, als Bild speichern. Aber wie??? Die Datei ist im Anhang angefügt, und wird bald auch in meinem eigenen Forum verfügbar sein.( ![]() Für schnelle Hilfe wäre ich sehr Dankbar. |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Hallo,
hier ein kleines Beispiel. Damit kannst Du den Inhalt der canvas als Bitmap speichern
Delphi-Quellcode:
var
Bitmap : TBitmap; begin Bitmap:=TBitmap.Create; Try Bitmap.Width:=PaintBox.ClientWidth; Bitmap.Height:=PaintBox.ClientHeight; BitBlt(Bitmap.Canvas.Handle,0,0,Bitmap.Width,Bitmap.Height, PaintBox.Canvas.Handle,0,0,SRCCOPY); Bitmap.SaveToFile('c:\canvas.bmp'); Finally Bitmap.Free; end; |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
|
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Wie sieht es mit einem SaveDialog aus?
Etwa so?
Delphi-Quellcode:
Wie gesagt, ich bin ein Anfänger.
var
Bitmap : TBitmap; begin Bitmap:=TBitmap.Create; Try Bitmap.Width:=PaintBox.ClientWidth; Bitmap.Height:=PaintBox.ClientHeight; BitBlt(Bitmap.Canvas.Handle,0,0,Bitmap.Width,Bitmap.Height, PaintBox.Canvas.Handle,0,0,SRCCOPY); Bitmap.SaveToFile(SaveDialog1); Finally Bitmap.Free; end; |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
setzte es einfach zb. unter Button1.click
|
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Delphi-Quellcode:
var
Bitmap : TBitmap; begin if SaveDialog.Execute then begin Bitmap:=TBitmap.Create; Try Bitmap.Width:=PaintBox.ClientWidth; Bitmap.Height:=PaintBox.ClientHeight; BitBlt(Bitmap.Canvas.Handle,0,0,Bitmap.Width,Bitmap.Height, PaintBox.Canvas.Handle,0,0,SRCCOPY); Bitmap.SaveToFile(SaveDialog.FileName); Finally Bitmap.Free; end; end; end; |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
hey,
Delphi-Quellcode:
mfg
if SaveDialog1.execute then Bitmap.SaveToFile(SaveDialog1.FileName);
//Edit Da war wohl einer schneller :-D |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Danke.
Wo muss der Code hin? Bei dem SaveDialog? |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Zitat:
|
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Kann manihn nicht in den SaveDialog packen?
Ist das nicht viel sinnvoller? |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Nein, da du den SaveDialog zum speichern irgendwie nicht anklicken kannst :-D
Außerdem ruft der Button den SaveDialog im Endeffekt ja sowieso auf |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Uups...
Das habe ich vergessen. Wie sieht der Quelltext denn nun für den Button mit dem SaveDialog aus? (Ohne euch wäre ich hoffnungslos verloren!!!) |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
DeddyH hat es doch schon so gut wie fertig gezeigt, du musst das nur noch ins OnClick vom Button packen und fertig:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Bitmap : TBitmap; begin if SaveDialog1.Execute then begin Bitmap:=TBitmap.Create; Try Bitmap.Width:=PaintBox1.ClientWidth; Bitmap.Height:=PaintBox1.ClientHeight; BitBlt(Bitmap.Canvas.Handle,0,0,Bitmap.Width,Bitmap.Height, PaintBox1.Canvas.Handle,0,0,SRCCOPY); Bitmap.SaveToFile(SaveDialog1.FileName); Finally Bitmap.Free; end; end; end; //EDIT Ich würde dir dazu noch raten, den Filter vom SaveDialog auf *.bmp zu setzen |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Danke.
Ich habe es ausprobiert. Die datei wird gespeichert. Trotzdem gibt es noch zwei Probleme: 1. Die endung wird nicht automatisch hinzugefügt. Es müsste also so aussehen:
Delphi-Quellcode:
Tut es der Filter auch allein?
procedure TForm1.Button1Click(Sender: TObject);
var Bitmap : TBitmap; begin if SaveDialog1.Execute then begin Bitmap:=TBitmap.Create; Try Bitmap.Width:=PaintBox1.ClientWidth; Bitmap.Height:=PaintBox1.ClientHeight; BitBlt(Bitmap.Canvas.Handle,0,0,Bitmap.Width,Bitmap.Height, PaintBox1.Canvas.Handle,0,0,SRCCOPY); Bitmap.SaveToFile(SaveDialog1.FileName + '.bmp'); Finally Bitmap.Free; end; end; end; 2. Da das Bild auf den Hintergrund gezeichnet wird, wird, wenn ich minimiere, der Hintergrund wieder Grau. Das Passiert auch, wenn man ein Fenster darüber zieht. Also auch beim SaveDialog. Kann man das irgendwie beheben? |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Ich weiß nicht, ob es eine bessere Lösung gibt, aber wenn du statt der Paintbox ein Image nimmst, bleibt das bild auch beim minimieren etc. da
Und zu der Endung, gib einfach beim SaveDialog bei DefaultExt ".bmp" an, dann wird das bmp automatisch hinzugefügt |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Wie geht das?
(Ich habe doch gesagt, dass ich ein Anfänger bin!!!) Ich weiß ja, dass TImage automatisch aktualisiert, aber wie krieg ich da mein Diagramm rein? Wie ist das Programm eigentlich?(Für einen Anfänger) |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
unter Filter kannst du es einstellen, sonst ist das Programm nicht schlecht
|
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
auf dem Image kannst du genau so zeichnen wie auf der paintbox (also mit Image1.Canvas...)
|
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Muss ich dann vor aus jedem Canvas ein Image1.canvas machen?
|
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Du hast doch vorher auf der paintbox gezeichnet, also Paintbox1.Canvas, das ersetzt du einfach überall durch Image1.Canvas
|
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Ich habe überhaupt nicht auf die Paintbox gezeichnet.
Ich habe einfach: Canvas.moveto(Wasweißich)... Aber nix mit Paintbox. |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Okay, das heißt, du hast direkt auf die Form gezeichnet und das speichern des Inhaltes der Paintbox hätte sowieso nichts gebracht.
Aber in dem Fall, ja, du musst Canvas.blabla durch Image1.blabla ersetzen :wink: |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Ich habe doch am anfang gesagt das ich auf Form1 gezeichnet habe. :lol:
Muss ich auch canvas.pen.color ersetzen? |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Jupp, alles mit Canvas ersetzen
|
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Eine Frage noch:
Kann ich Timage dazu bringen seine Größe an die des Fensters anzupassen? Wie? |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Indem du ins OnResize Event der Form
Delphi-Quellcode:
einfügst.
Image1.Height:=Form1.ClientHeight;
Image1.Width:=Form1.ClientWidth; //Edit: dazu muss das Image aber Top & left =0 sein, also ganz links oben in der form, ansonsten gibts nen fehler... //Edit²: Noch besser:
Delphi-Quellcode:
Image1.Height:=Form1.ClientHeight-Image1.Top;
Image1.Width:=Form1.ClientWidth-Image1.Left; |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Bevor ich die neue Version hochlade möchte ich noch eines wissen:
Gibt es so etwas wie:
Delphi-Quellcode:
Ich habe das "Refresh" meines Formulars in "Image1.Refresh" umgewandelt.
Image1.Refresh;
Es funktioniert nicht!!! Wie leert man die Fläche von Image1? |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Einfach mit FillRect drübermalen ;)
|
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ist der neue Download.
Mit Nachfrage vor dem Schließen(leider nur wenn die Aktion durch den Button ausgelöst wird, der X Button kommt noch) und der Speichern Funktion. Die gespeicherten Bilder sehen ![]() Ich finde, es sieht ein wenig "pixelig" aus. Kann man das irgendwie beheben? Es wird ja so gezeichnet. Kann Canvas das nicht besser? Was könnte man noch hinzufügen? |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Zitat:
MfG ps: Wenn du dein Programm vostellen willst, dann tu das unter Freeware :wink: |
Re: Problem beim Speichern einer mit Canvas gezeichneten Gra
Kann man in Delphi vielleicht noch etwas höher Qualitatives(von der Auflösung her) verwenden?
Das muss doch irgendwie möglich sein!!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 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 by Thomas Breitkreuz