Autor Beitrag
AlexBegin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Do 14.05.09 07:43 
Ich habe ein Form2 das ich mittels GetFormImage abspeichere. Dieses Bild wird in einer anderen Software weiter verwendet.
Leider wird die Farbtiefe mit 32bit abgespeichert. Mit dieser Farbtiefe kann die nachfolgende Software nichts anfangen. Sie müsste 24bit sein.
Wie kann ich, wenn möglich vor dem Speichern, die Farbtiefe ändern, das diese mit 24bit gespeichert wird?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button12Click(Sender: TObject);
begin
  SaveDialog1.FileName := 'logo.bmp';
  if SaveDialog1.Execute then
    begin
      Form2.GetFormImage.SaveToFile(SaveDialog1.FileName);
    end;
end;


Bis dann Alex

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Moderiert von user profile iconNarses: Topic aus Multimedia / Grafik verschoben am Do 14.05.2009 um 09:25
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 14.05.09 08:25 
Moin!

Mit dem aktuellen Code geht das nicht, du musst das Image vorher in ein temporäres TBitmap lesen und dann .Pixelformat := pf24Bit setzen. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
AlexBegin Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Do 14.05.09 08:32 
Hallo Narses, könntest du mir eventuell etwas unter die Arme greifen und mir den Code zeigen wie man das macht. Ich hab bei Grafiken sogut wie keine Ahnung.

Bis dann Alex

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Hallo Narses, ich musste erst einmal hier im Forum suchen und dies dann auch für mein Problem umsetzen. Ich habe mein Code folgendermaßen erweitert.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.Button12Click(Sender: TObject);
var
  TempBMP: TBitmap;

begin
  SaveDialog1.FileName := 'logo.bmp';
  if SaveDialog1.Execute then
    begin
      Form2.GetFormImage.SaveToFile(SaveDialog1.FileName);
      TempBMP := TBitmap.Create;
      TempBMP.LoadFromFile(SaveDialog1.Filename);
      try
        TempBMP.PixelFormat := pf24bit;
        TempBMP.SaveToFile(SaveDialog1.Filename);
      finally
        TempBMP.Free;
      end;
    end;
end;


Jetzt habe ich die richtige Farbtiefe und es funktioniert auch mit der anderen Software.

Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Do 14.05.09 09:44 
Warum so kompliziert, GetFormImage liefert doch schon ein TBitmap. Du musst es doch nicht speichern, wieder laden und wieder speichern.

Prinzipiell:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var bmp : TBitmap;
begin
  bmp := self.GetFormImage;
  try
    bmp.PixelFormat := pf24bit;
    bmp.SaveToFile('c:\temp\test.bmp');
  finally
    bmp.free;
  end;
end;

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
AlexBegin Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Do 14.05.09 10:59 
Dein Code ist soweit gut, es speichert das Form ab, in dem der Code enthalten ist. Ich habe vergessen, das bei mir der Code im Form1 steht, aber Form2 (Form2 ist nur da, um TImage und Memos darzustellen) abgespeichert werden muss.
Habe versucht dein Code anzupassen, aber ohne Erfolg.
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 14.05.09 11:22 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var bmp : TBitmap;
begin
  bmp := Form2.GetFormImage;
  try
    bmp.PixelFormat := pf24bit;
    bmp.SaveToFile('c:\temp\test.bmp');
  finally
    bmp.free;
  end;
end;
:gruebel:

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Do 14.05.09 11:23 
Das "self" oben im Code ist nur ein Verweis auf das Formular (eigentlich Klasse), in der der Code steht. Du kannst es einfach durch "form2" ersetzen.

Wenn man es sauber machen will, würde ich den Code evtl. komplett aus den Forms in eine Unit auslagern:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Procedure SaveFormImage(frm : TForm, Filename : String);
var bmp : TBitmap;
begin
  bmp := frm.GetFormImage;
  try
    bmp.PixelFormat := pf24bit;
    bmp.SaveToFile(Filename);
  finally
    bmp.free;
  end;
end;


Aufrufen kannst Du es z.B. so:
ausblenden Delphi-Quelltext
1:
2:
SaveFormImage(self, 'c:\temp\test.bmp'); {Das aktuelle Formular speichern}
SaveFormImage(Form2, 'c:\temp\Form2.bmp'); {Form2 speichern}

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
AlexBegin Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Do 14.05.09 11:45 
Sorry, habe es im ersten Augenblick übersehen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Button12Click(Sender: TObject);
var
  TempBMP: TBitmap;

begin
  SaveDialog1.Filter := 'Bitmap-Grafik (*.bmp)|*.BMP';
  SaveDialog1.FileName := 'logo.bmp';
  if SaveDialog1.Execute then
    begin
      TempBMP := Form2.GetFormImage;
      try
        TempBMP.PixelFormat := pf24bit;
        TempBMP.SaveToFile(SaveDialog1.Filename);
      finally
        TempBMP.Free;
      end;
    end;
end;


Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt