使用Device Context在CImage对象上绘制线条

时间:2015-02-04 15:03:31

标签: c++ bitmap mfc drawing device-context

我正在构建一个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);
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

根据您显示的内容,您似乎使用了错误的DC。您似乎使用DC作为对话框(即CCLientDC)和实际的CImage。你应该从

构建DC

CImage::GetDC ()

DC将具有当前选择的位图。