ich möchte gerne in meiner "Text Engine" eine Möglichkeit haben den Canvas abzuspeichern. Jedoch sind alle meine versuche Fehl geschlagen.
Weil das Handle vom TBitmap ungültig ist.
hier meine bisherigen Versuche:
Code: Alles auswählen
plBmp:=TBitmap.Create;
plBmp.PixelFormat:=pf32bit;
plBmp.Width:=TextEngine.Width;
plBmp.Height:=TextEngine.Height;
{ plBmp.Canvas.Brush.Style:=bsSolid;
plBmp.Canvas.Brush.Color:=clBlack;
plBmp.Canvas.Rectangle(0,0,TextEngine.Width,TextEngine.Height);
plBmp.Canvas.Brush.Color:=clRed;
c1:=TextEngine.Canvas;
c2:=plBmp.Canvas;
CopyCanvasAll(c1, c2);}
// plBmp.Canvas.Ellipse(30,30,60,60);
// r:=Rect(0,0,TextEngine.Width, TextEngine.Height);
//writeln(TextEngine.Canvas.Handle);
// BitBlt(plBmp.Canvas.Handle,
// 0,0,plBmp.Width, plBmp.Height,
// TextEngine.Canvas.Handle,0,0,SRCCOPY
// );
// plBmp.Canvas.CopyRect(r,TextEngine.Canvas,r);
SaveBMPToFile('/home/pluto/Desktop/TextEngine/B.bmp',plBmp);
// plBmp.SaveToFile();
// plBmp.Free;
Code: Alles auswählen
procedure SaveBMPToFile(const aFileName: String; aBuffer: TBitMap);
var
op:TOPPicture;
begin
op:=TOpPicture.Create;
AssignBitmapToOpBitmap(aBuffer,op.Bitmap);
op.SaveToFile(aFilename);
op.free;
end;
Code: Alles auswählen
procedure CopyCanvasAll(var aSrcCanvas, aDesCanvas:TCanvas);
var
x,y:Integer;
begin
for y:=0 to aSrcCanvas.Height do begin
for x:=0 to aSrcCanvas.Width do begin
aDesCanvas.Pixels[x,y]:=aSrcCanvas.Pixels[x,y];
end; // for x
end; // for y
end;
Frage 2) Was für Möglichkeiten gibt es noch um ein Canvas in eine Date abzuspeichern.
Ich dachte ich kopiere es einfach in eine TBitmap Variable, aber leider habe ich das bis jetzt noch nicht hinbekommen. Ist das nein neuer BUG in Lazarus ?
Oder mache ich was Falsch, wenn ich was Falsch mache: Was ?
Das Bild jedenfalls bleibt immer leer.
Meine "Text Engine" zeichnet alles auf einen Canvas, selbst hier ist das handle ungültig. Und genau dieses Canvas möchte ich gerne abspeichern.
Bisher habe ich immer ein externes Programm aufgerufen, aber ich dachte eine selbst eingebaute Funktion ist besser.
Lazarus 0.9.27 Linux, Debian, Lenny KDE 3.5