Autor Beitrag
Vaio
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32

Win XP Home
D7 Prof
BeitragVerfasst: Mo 28.11.05 17:45 
Wir haben im Informatikunterricht ein Malprogramm programmiert. Ich habe heute versucht mit meinem Kollegen die Bilder abzuspeichern, leider erfolglos. Danach haben wir den Lehrer gefragt und erwidert nur, dass das sehr schwer sei, weil man jeden einzelnen Pixel speichern müsste.
Meine Frage ist jetzt, wie länge wäre so ein Programmiercode zum Speichern eines Bildes? Vielleicht wäre es für euch hilfreich zu wissen wie das Malprogramm aufgebaut ist. Also oben ist ein Panel mit allen Buttons für die verschiedenen Funktionen und da drunter kann gemalt werden.

Ginge das nicht nach dem Prinzip:

Form1.Canvas (SaveToFile)

oder so ähnlich?

Danke schon mal für eure Hilfe!


Moderiert von user profile iconChristian S.: Topic aus Sonstiges verschoben am Mo 28.11.2005 um 18:05
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mo 28.11.05 17:57 
Mal nicht auf die Form, sondern auf ein TImage und speichere mit Image1.Picture.SaveToFile();.

Andere Möglichkeit: Erstelle ein TBitmap, zeichne darauf beim Speichern das Bild des Form1.Canvas und speichere das Bitmap.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 28.11.05 18:06 
Hallo!

Bitte passe den Titel Deines Threads an, da es hier nicht wirklich um den SavePictureDialog zu gehen scheint. Vielen Dank! :-)

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Vaio Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32

Win XP Home
D7 Prof
BeitragVerfasst: Mo 28.11.05 18:10 
Wo muss ich denn den Befehl Image1.Picture.SaveToFile einfügen?
Bei SavePictureDialog gibt es mehrere Ereignisse.
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mo 28.11.05 18:16 
Also meine Möglichkeit war jetzt ohne den PictureDialog, da ich den noch nie benutzt habe.
Image1.Picture.SaveToFile muss z.B. in OnButtonClick des Speicher-Buttons.
Kannst aber auch den SaveDialog benutzen und dann nach Excute mit SaveDialog.Filename speichern.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mo 28.11.05 19:33 
ich denke das das so reichen müsste. es kann sein das da fehler drinne sind weil ich das jetzt im texteditor geschrieben habe.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.SaveImage;
begin
  if savePictureDialog1.Execute=true then
  begin
    image1.Picture.SaveToFile(savePictureDialog1.fileName);
  end;
end;
Amateur
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 777

(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
BeitragVerfasst: Mo 28.11.05 19:35 
das =true kannste weglassen ansonsten siehts richtig aus..

_________________
"Kein dummes Gerede. Kein Rumrätseln. Denkt an nichts anderes mehr, nur noch an das, was vor euch liegt. Das ist die wahre Herausforderung. Ihr müßt euch vor euch selbst schützen, Leute." (Rennes in "Cube")
Beiträge: >700
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mo 28.11.05 19:43 
begin und end kann auch noch weg. 2 Zeilen für so etwas "schweres" wie dein Lehrer meint :wink: .

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Vaio Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32

Win XP Home
D7 Prof
BeitragVerfasst: Mo 28.11.05 21:39 
Das klappt irgendwie nicht! Muss ich jetzt erstmal ein Image erstellen? Und wo muss ich diese Prozedur einfügen? Ich habe jetzt nur einen Button der den SavePictureDialog öffnet, brauche ich noch einen weiteren oder erledigt das die Prozedur?
Delphi zeigt ganze Zeit an, dass SaveImage ein Undefinierter Bezeichner sei! Was jetzt?
Amateur
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 777

(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
BeitragVerfasst: Mo 28.11.05 21:45 
natürlich musste ein image erstellen wie willst du sonst was speichern??
aber ich glaub das hier ist erst mal besser für dich anzuschauen:
Crashkurs Delphi
und
Delphi Source
und
Delphi Basics für diverse Befehle

_________________
"Kein dummes Gerede. Kein Rumrätseln. Denkt an nichts anderes mehr, nur noch an das, was vor euch liegt. Das ist die wahre Herausforderung. Ihr müßt euch vor euch selbst schützen, Leute." (Rennes in "Cube")
Beiträge: >700
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mo 28.11.05 21:45 
1. Du brauchst ein TImage auf der Form.
2. Das was oben zwischen begin und end steht, tuste in OnClick des Speicher-Buttons.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Di 29.11.05 20:43 
@Vaio:
tschuldige das ich mich so deutlich ausdrücke, aber ich hätte eben beim lesen beinahe meinen kopf *mit viel schwung* auf den tisch *sinken* lassen.
ich verstehe einfach nicht wie ihr es geschafft habt ein malprogramm zu schreiben wenn der lehrer nicht einmal weiß wie man das bild dann speichern kann!
du hast also den button mit dem du das bild speichern willst. von mir aus Button1. du machst nun im desinger einen doppelclick auf diesen button. in deinem quelltexteditor hast du nun in etwa folgendes:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure Form1.Button1Click(Sender: TObject);
begin

end;


darin hast du wie du schon erwähnt den aufruf deines bild speichern dialoges, also in etwa sowas:
(ich lege wert auf ordentliche und übersichtlige programmierung, daher nutzte ich hier mal die volle *geschwätzigkeit* von objectpascal aus)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure Form1.Button1Click(Sender: TObject);
begin
  if savePictureDialog1.Execute=true then
  begin
    // hier soll die datei gespeichert werden
  end;
end;


nun zum schwierigeren teil, das speichern des bildes. da kommt die frage auf wohin du dein bild gezeichnet hast.
wenn euch der lehrer auf das formular hat zeichnen lassen möchte ich den lehrer liebend gerne mal kennen lernen. dann würde ich nämlich gerne seinen job übernehmen damit sowas nie wieder passiert!
für zeichnen auf ein image:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure Form1.Button1Click(Sender: TObject);
begin
  if savePictureDialog1.Execute=true then
  begin
    // hier soll die datei gespeichert werden
    image1.Picture.SaveToFile(savePictureDialog1.fileName);
  end;
end;



für zeichen auf dem formular!
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
// die unit >Graphics< in die uses aufnehmen falls noch nicht vorhanden (für TBitmap)
procedure TForm1.Button1Click(Sender: TObject);
var bmp:TBitmap;
    sdRect:TRect;

begin
  try
    bmp:=TBitmap.Create;
    bmp.PixelFormat:=pf32bit; // alle freiheiten der farblichen gestaltung
    bmp.Width:=form1.ClientWidth;
    bmp.Height:=form1.ClientHeight;
    sdRect:=Rect(0,0,form1.ClientWidth,form1.ClientHeight);
    bmp.Canvas.CopyRect(sdRect,form1.Canvas,sdRect);
    if savePictureDialog1.Execute=true then
    begin
      // hier soll die datei gespeichert werden
      bmp.SaveToFile(SavePictureDialog1.FileName);
    end;
  finally
    bmp.Free;
  end;
end;


ich hoffe doch einmal das das alle deine probleme lößen hilft.