[Verschoben] BitBlt liefert schwarzes Bild

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
atreiju
Beiträge: 7
Registriert: Fr 25. Jan 2013, 12:43

[Verschoben] BitBlt liefert schwarzes Bild

Beitrag von atreiju »

Hallöchen,

ich versuche ein Canvas zu speichern. Leider ist das Ergebnis ein völlig schwarzes Bild:

Code: Alles auswählen

procedure SaveCanvas(SaveCanvas : TCanvas; Size : Integer; FileName : string);
var
  Bitmap : TBitmap;
begin
  Bitmap := TBitmap.Create;
  Try
    Bitmap.Width := Size;
    Bitmap.Height := Size;
    BitBlt(Bitmap.Canvas.Handle,0,0,Bitmap.Width,Bitmap.Height,
           SaveCanvas.Handle,0,0,SRCCOPY);
    Bitmap.SaveToFile(FileName);
  Finally
    Bitmap.Free;
  end;
end;     
Aufrufen tue ich die Prozedur so:

Code: Alles auswählen

 
procedure TForm1.Button4Click(Sender: TObject);
begin
  if SaveDialog1.Execute then
  begin
    SaveCanvas(BarcodeQR1.Canvas, BarcodeQR1.Width, SaveDialog1.Filename);    // why the image has no transparency?
  end;
end;      
Wobei BarcodeQR1 eine Komponente von LazBarcodes ist, die scheinbar aber funktioniert (der Barcode wird in der Form angezeigt.)

Kann mir jemand helfen, wie ich den Barcode gespeichert bekomme?

Dankeschön und Grüße,
Atreiju.
Zuletzt geändert von atreiju am Fr 25. Jan 2013, 16:24, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10907
Registriert: Mo 11. Sep 2006, 19:01

Re: BitBlt liefert schwarzes Bild

Beitrag von theo »

Probier mal sowas:

Code: Alles auswählen

var
  MyBitmap: TBitmap;
begin
  MyBitmap := TBitmap.Create;
  MyBitmap.LoadFromDevice(SaveCanvas.Handle);
  ...
  MyBitmap.Free;
 

atreiju
Beiträge: 7
Registriert: Fr 25. Jan 2013, 12:43

Re: BitBlt liefert schwarzes Bild

Beitrag von atreiju »

[quote="theo"]Probier mal sowas:

Danke, aber da kommt ganz was komisch raus (siehe Anhang)

My Code war diesesmal:

Code: Alles auswählen

procedure SaveCanvas(SaveCanvas : TCanvas; Size : Integer; FileName : string);
var
  MyBitmap : TBitmap;
begin
  MyBitmap:= TBitmap.Create;
  MyBitmap.LoadFromDevice(SaveCanvas.Handle);
  MyBitmap.Width := Size;
  MyBitmap.Height := Size;
  BitBlt(MyBitmap.Canvas.Handle,0,0,MyBitmap.Width,MyBitmap.Height,
         SaveCanvas.Handle,0,0,SRCCOPY);
  MyBitmap.SaveToFile(FileName);
  MyBitmap.Free;
end;          
Dateianhänge
test2.bmp
test2.bmp (732.47 KiB) 1740 mal betrachtet

atreiju
Beiträge: 7
Registriert: Fr 25. Jan 2013, 12:43

Re: BitBlt liefert schwarzes Bild

Beitrag von atreiju »

Oh, was vielleicht noch wichtig ist: Das Element BarcodeQR ist nicht unbedingt vollständig auf dem Form sichtbar (da ich nämlich auch Barcodes ist hoher Auflösung generieren möchte).

Benutzeravatar
theo
Beiträge: 10907
Registriert: Mo 11. Sep 2006, 19:01

Re: BitBlt liefert schwarzes Bild

Beitrag von theo »

Nö, dann braucht's kein Bitblt und Width etc. mehr.

MyBitmap.LoadFromDevice müsste reichen.

Aber wenn der Canvas nicht ganz sichbar ist, kannst du es auf diese Weise sowieso vergessen.

atreiju
Beiträge: 7
Registriert: Fr 25. Jan 2013, 12:43

Re: BitBlt liefert schwarzes Bild

Beitrag von atreiju »

theo hat geschrieben:Nö, dann braucht's kein Bitblt und Width etc. mehr.

MyBitmap.LoadFromDevice müsste reichen.

Aber wenn der Canvas nicht ganz sichbar ist, kannst du es auf diese Weise sowieso vergessen.
Ohne Bitblt etc kam das gleiche kuddelmuddel raus. Aber ja, ich brauche auf jedem Fall den gesamten BarcodeQR, auch den nicht sichtbaren Teil.

Hat jemand noch eine andere Idee?

atreiju
Beiträge: 7
Registriert: Fr 25. Jan 2013, 12:43

Re: BitBlt liefert schwarzes Bild

Beitrag von atreiju »

Habe meine Frage jetzt nochmal allgemeiner und treffender formuliert: http://www.lazarusforum.de/viewtopic.php?p=59204#p59204

Der Thread hier kann dann glaube ich geschlossen werden.
Zuletzt geändert von Lori am Fr 25. Jan 2013, 21:35, insgesamt 1-mal geändert.
Grund: Link genauer gestaltet

Antworten