【问题标题】:Adding GDI shapes on BITMAP in MFC在 MFC 中的 BITMAP 上添加 GDI 形状
【发布时间】:2015-07-02 23:08:28
【问题描述】:

我已经加载了位图图像并设法在位图图像上绘制了一个椭圆。问题是椭圆看起来好像是用刷子画的,但我用钢笔画了椭圆。 (即)椭圆是不透明的。我希望它是透明的。椭圆的颜色也固定为白色。即使我更改 RGB 值,它也不会改变。

这里是代码

void CImagePreview1View::OnPaint()
{
    CPaintDC dc(this);
    CBitmap bmp;
    CDC MemDC;
    bmp.LoadBitmap(IDB_FOOD);
    MemDC.CreateCompatibleDC(&dc);
    CBitmap *bmpPrevious=MemDC.SelectObject(&bmp);
    dc.BitBlt(20,30,436,364,&MemDC,0,0,SRCCOPY);
    dc.SelectObject(bmpPrevious);
    CPen newPen;
    newPen.CreatePen(PS_SOLID,1,RGB(152,125,175));
    dc.SelectObject(newPen);
    dc.Ellipse(30,60,130,160);
}

【问题讨论】:

  • SelectObject 方法返回前一个对象的句柄。尝试将原始对象选择回 dc。它应该像“文件关闭”一样。有关信息,请参阅MSDN

标签: bitmap mfc gdi


【解决方案1】:

你还没有选择透明画笔:

  CBrush brush;
  brush.CreateStockObject(NULL_BRUSH);
  CBrush* oldBrush =  (CBrush*)MemDC.SelectObject(&brush);

【讨论】:

  • 感谢您的回复。但是我用过钢笔。钢笔不应该画空心的形状吗?
  • 钢笔和画笔都用于绘制形状。所以你也必须选择画笔。
  • 据我所知,钢笔画一个空心椭圆,刷子画一个实心椭圆。我的问题是,即使我使用了笔,我最终是否得到了填充椭圆?
  • 是的,即使您只使用了笔,您最终也会得到填充椭圆。问题是在这种情况下将使用默认画笔。因此,您必须选择 NULL_BRUSH 才能绘制透明形状。
  • 非常感谢安德鲁 :-)
猜你喜欢
  • 1970-01-01
  • 2011-06-02
  • 2010-09-26
  • 2013-11-26
  • 2011-12-11
  • 2021-08-21
  • 2018-12-25
  • 2016-12-16
相关资源
最近更新 更多