首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于GDI+的TBitmap绘图

基于GDI+的TBitmap绘图
EN

Stack Overflow用户
提问于 2019-10-20 18:15:32
回答 1查看 734关注 0票数 1

除了通过GDI+ (一直工作正常)将TGPGraphics绘制到控制画布上外,我还试图使用GDI+在TBitmap上绘制,然后将位图绘制到控制画布上。然而,实际上似乎没有任何东西被画出来。

以下代码位于WM_PAINT消息处理程序中,该处理程序同样适用于实际的控件画布,但是当创建等效的TGPGraphics对象并传递此TBitmap句柄时,不会绘制任何内容:

代码语言:javascript
复制
  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看起来是这样的,并且用于此位图和控件:

代码语言:javascript
复制
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+)。因此,我知道实际的位图被正确地绘制到控制画布上。

代码语言:javascript
复制
FBitmap.Canvas.MoveTo(P1.X, P1.Y);
FBitmap.Canvas.LineTo(P2.X, P2.Y);

我在这里做错了什么,如何使TGPGraphics在这个位图画布上工作?

PS --我使用TBitmap的唯一原因是,我实际上所写的东西需要“记住”以前绘制的部分内容并保留它,而不是一遍又一遍地重新绘制它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-20 18:25:48

刚刚解决了问题,这是个愚蠢的错误。

当创建TGPGraphics对象时,它应该是FBitmap.Canvas.Handle,而不是传递FBitmap.Handle

你需要位图画布的手柄,而不是位图本身。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58475898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档