【发布时间】:2020-02-16 22:18:08
【问题描述】:
除了通过TGPGraphics 将 GDI+ 绘制到控制画布上(一直工作正常),我还尝试使用 GDI+ 在TBitmap 上绘制,然后将该位图绘制到控制画布上.但是,实际上似乎没有绘制任何内容。
以下代码在WM_PAINT 消息处理程序中,它同样适用于实际的控制画布,但是当创建等效的TGPGraphics 对象并传递此TBitmap 句柄时,什么都不会绘制:
FBitmapCanvas:= CreateGPCanvas(FBitmap.Handle);
try
FBitmapCanvas.DrawLine(FSomePen, P1, P2); //Same pen used to successfully draw to control canvas
finally
FreeAndNil(FBitmapCanvas);
end;
Canvas.Draw(0, 0, FBitmap); //Draw this bitmap to control canvas
CreateGPCanvas 看起来像这样,用于此位图和控件:
function CreateGPCanvas(const DC: HDC): TGPGraphics;
begin
Result:= TGPGraphics.Create(DC);
Result.SetInterpolationMode(InterpolationMode.InterpolationModeHighQuality);
Result.SetSmoothingMode(SmoothingMode.SmoothingModeHighQuality);
Result.SetCompositingQuality(CompositingQuality.CompositingQualityHighQuality);
end;
另一方面,如果我不尝试使用TGPGraphics 而是直接通过TBitmap.Canvas 属性画一条线,它可以正常工作(但当然看起来很难看,因为它不是GDI+)。所以我知道实际的位图被正确地绘制到控制画布上。
FBitmap.Canvas.MoveTo(P1.X, P1.Y);
FBitmap.Canvas.LineTo(P2.X, P2.Y);
我在这里做错了什么,如何让TGPGraphics 在这个位图画布上工作?
PS - 我使用TBitmap 的唯一原因是因为我实际编写的内容需要“记住”之前绘制的部分并保留它,而不是一遍又一遍地重新绘制。
【问题讨论】:
标签: delphi canvas gdi+ vcl delphi-10.1-berlin