【问题标题】:Draw lines using Device Context over a CImage object在 CImage 对象上使用设备上下文绘制线条
【发布时间】:2015-04-04 03:52:42
【问题描述】:

我正在构建一个 MFC c++ 应用程序,让用户在其中读取图像,在其上画线,然后保存。

所以我有一个名为“Image”的“CImage”对象,用户将图像加载到其中。

我有一个设备上下文对象,我可以在上面画线 设备上下文对象在运行时使用“OnLButtonDown”和“OnLButtonUp”事件处理程序。

然后我让用户使用“CImage.save”保存图像 .. 图像已保存,但设备上下文绘制的线条不存在,这是预期的 .. 但我确实希望它们出现在保存的图像中..

问题是如何让设备上下文对象影响我的 CImage 对象?

这是鼠标按下的事件处理程序

void CProFilterDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
    curser =point;
    if (draw && Boundry.PtInRect(point) )
    {
        CDialogEx::OnLButtonDown(nFlags, point);
    }

}

当鼠标按钮向上时这个

void CProFilterDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
    if (draw && Boundry.PtInRect(curser) && Boundry.PtInRect(point))
    {
        CClientDC dc(this);
        dc.MoveTo(curser);
        dc.LineTo(point);
        CDialogEx::OnLButtonUp(nFlags, point);
    }


}

这是我加载 Cimage 对象的地方

void CProFilterDlg::OnBnClickedBtnBrowse()
{
    CFileDialog Browse(true);
    if(Browse.DoModal() == IDOK)
    {
         ImagePath = Browse.GetPathName();
    }

        image.Load(ImagePath);
}

这是我保存 CImage 的地方

void CProFilterDlg::OnBnClickedSave()
{
    CFileDialog Save(true);
    if(Save.DoModal() == IDOK)
    {
        ImagePath = Save.GetPathName();
    }
    image.Save(ImagePath,Gdiplus::ImageFormatBMP);
}

【问题讨论】:

  • 您是如何获得 DC 的?您没有显示任何相关代码。
  • 我已编辑帖子以显示我的 DC

标签: c++ bitmap mfc drawing gdi


【解决方案1】:

从您显示的内容来看,您似乎使用了错误的 DC。您似乎将 DC 用于对话框(即 CCLientDC),而 不是 实际的 CImage。您应该从

构建 DC

CImage::GetDC ().

该 DC 将具有当前选定的位图。

【讨论】:

  • GetDC() 只为我提供了设备上下文的 HDC 句柄,我需要使用诸如 moveto() 和 lineto() 之类的功能,并且它仅适用于 CDC 我如何将这些功能与 GetDC 一起使用()?
  • 您可以从 HDC 构建 DC。看看CDC的方法。您会发现 FromHandle 允许您创建 CDC。
  • 我写道:HDC HDC =image.GetDC();疾控中心直流; pdc=dc.FromHandle(Hdc); dc.MoveTo(光标); dc.LineTo(点);但是发生了断言错误,并且在调试时我注意到未使用 Hdc “无法读取内存”:D 这很奇怪:D
  • 您没有仔细阅读文档。 FromHandle 返回一个指向 CDC 的指针,不是一个实际的 CDC。您需要改用指针来更改调用方法的方式。
【解决方案2】:

您在寻找CImage:BitBlt 吗?它用于将位图从源设备上下文复制到当前设备上下文。

【讨论】:

  • 嗯,这将有助于我在图像的副本上绘图.. 我仍然需要将设备上下文与复制的位图放入 CImage 对象中,以便我可以使用 CImage.save
猜你喜欢
  • 1970-01-01
  • 2017-07-08
  • 2013-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 2011-01-12
相关资源
最近更新 更多