请问如何实现在Windows自带的小画家中,放大很多倍后有网格情况下那种画线的效果

developCpp 2007-04-17 06:30:54
请问如何实现在Windows自带的小画家中,放大很多倍后有网格情况下那种画线的效果

显示BMP文件的代码如下

CString szFilename("D:\\ filename.bmp");
HBITMAP hBmp = (HBITMAP)::LoadImage(NULL,szFilename,
IMAGE_BITMAP,0,0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);

CBitmap bmp;
bmp.Attach(hBmp);

CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(&bmp);

pDC->StretchBlt(0, 0, 480, 480, &memDC, 0, 0, 48, 48, SRCCOPY);

ReleaseDC(pDC);

请问怎么能够在画线时按下鼠标左键然后移动鼠标时这个线条也会是一格一格的这个过程的这种效果
...全文
337 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
developCpp 2007-04-18
  • 打赏
  • 举报
回复
临时建了个SDI工程Sample
随便搞了个BMP图, IDB_BITMAP1
随便画了几笔
加了以下代码

void CSampleView::OnDraw(CDC* pDC)
{
CSampleDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);

CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(&bmp);

pDC->StretchBlt(0, 0, 480, 480, &memDC, 0, 0, 48, 48, SRCCOPY);

CPen dPen;
if(dPen.CreatePen(PS_DOT,1,RGB(0,0,0)))
{
CPen* savedPen = NULL;
savedPen = pDC->SelectObject(&dPen);
pDC->SetROP2(R2_XORPEN);
pDC->MoveTo(0,0);
pDC->LineTo(100,100);
pDC->SelectObject(savedPen);
dPen.DeleteObject();
}
}
结果还是不行喔
无法将Line的线条一方格一方格的画出来,这个过程的这种效果

不胜感激
Rock_And_Roll 2007-04-18
  • 打赏
  • 举报
回复
也许就像楼上说得那样把,没有具体做过。楼主可以做一下,
buggycode 2007-04-18
  • 打赏
  • 举报
回复
这里是用异或的做法。不用异或相当复杂,性能各方面要考虑的东西比较多

...
CPen dPen;
if(dPen.CreatePen(PS_DOT,1,RGB(0,0,0)))
{
CPen* savedPen = NULL;
savedPen = pDC->SelectObject(&dPen);
pDC->SetROP2(R2_XORPEN);
...
pDC->SelectObject(savedPen);
dPen.DeleteObject();
}
...

developCpp 2007-04-18
  • 打赏
  • 举报
回复
谢谢
终于看到效果了喔 ^_^
代码修改如下

void CBmpView::OnDraw(CDC* pDC)
{
CBmpDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);

CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(&bmp);

memDC.MoveTo(0,0);
memDC.LineTo(30,30);

pDC->StretchBlt(0, 0, 480, 480, &memDC, 0, 0, 48, 48, SRCCOPY);
}

请问还有其它更好的方法了吗?
如果没有,马上结贴
lambochan 2007-04-18
  • 打赏
  • 举报
回复
画完放大..也就是说,例如在一幅100x100 pixel的BMP上画线,放大8倍变为800x800,在原图画线时放大显示就变成格状的效果了.
你的代码是放大了然后在屏幕上画,次序颠倒,当然没有那效果了.

实现方法是:
捕捉鼠标,在原图上画橡皮线,然后放大显示(需要画网格就画网格)

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧