求助大神:修改位图中指定区域像素值

qq_35477837 2016-07-01 09:16:11
加精
目的:单文档程序加载了一张灰度图,现在希望在视图中用鼠标任拉一个框,并将该框中图片像素设为指定值;灰度图是1392*1040的;我的单文档程序没有添加滚动条(我需要的信息就在视图中);
问题:鼠标拉框时,记住鼠标左键down的位置,再记住鼠标右键up的位置,结果在另一个地方显示了指定颜色(映射模式为默认)。我是门外汉哈,请大神帮助,尽量讲述详细一些,谢谢!
...全文
931 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_30838433 2016-07-11
  • 打赏
  • 举报
回复
顶一下,学习学习。
schlafenhamster 2016-07-10
  • 打赏
  • 举报
回复
qq_35477837 2016-07-10
  • 打赏
  • 举报
回复
衷心感谢schlafenhamster!同时谢谢各位的关注和建议!
schlafenhamster 2016-07-09
  • 打赏
  • 举报
回复
详细见 “修改位图中指定区域像素值” http://download.csdn.net/detail/schlafenhamster/9571693 VC6 对话框工程
schlafenhamster 2016-07-08
  • 打赏
  • 举报
回复
大概是这样:

//
void CRectTrackDlg::DrawRectBorder(CDC &dc,CRect rc)
{
	int s= dc.SaveDC();
	dc.SetROP2(R2_NOT);
//	dc.SetMapMode(MM_HIMETRIC);
//	dc.DPtoLP(&rc);
	dc.MoveTo(rc.left,rc.bottom);
	dc.LineTo(rc.left,rc.top);
	dc.LineTo(rc.right,rc.top);
	dc.LineTo(rc.right,rc.bottom);
	dc.LineTo(rc.left,rc.bottom);
	dc.RestoreDC(s);
}

void CRectTrackDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if(m_startPoint != m_OldPoint)
	{// erase old rect
		CClientDC dc(this);
		CRect rc(m_startPoint,m_OldPoint);
		rc.NormalizeRect();
		DrawRectBorder(dc,rc);
	}
	m_startPoint = point;
	m_OldPoint = point;
//	
	CDialog::OnLButtonDown(nFlags, point);
}
//
void CRectTrackDlg::shoudongchuli()
{
	CClientDC dc(this);
	CRect rc(m_startPoint,m_OldPoint);
	rc.NormalizeRect();
	for(int j=rc.top;j<=rc.bottom;j++)
	{
		for(int i=rc.left;i<=rc.right;i++)
		{
			dc.SetPixel(i,j,255);
		}
	}
}
//
void CRectTrackDlg::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	m_OldPoint=point;
//	shoudongchuli();
	
	CDialog::OnLButtonUp(nFlags, point);
}

void CRectTrackDlg::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if (MK_LBUTTON==nFlags)
	{
		CClientDC dc(this);
		if(m_startPoint != m_OldPoint)
		{
			CClientDC dc(this);
			CRect rcOld(m_startPoint,m_OldPoint);
			rcOld.NormalizeRect();
			DrawRectBorder(dc,rcOld);
		}
		CRect rcNew(m_startPoint,point);
		rcNew.NormalizeRect();
		DrawRectBorder(dc,rcNew);
		m_OldPoint = point;
	}
//	
	CDialog::OnMouseMove(nFlags, point);
}
qq_20599767 2016-07-06
  • 打赏
  • 举报
回复
目前都在学习,不错学到老活到老
qq_34945008 2016-07-05
  • 打赏
  • 举报
回复
有没有图书管理系统安卓端代码
cattpon 2016-07-05
  • 打赏
  • 举报
回复
过来学习一下~
baidu_32583783 2016-07-05
  • 打赏
  • 举报
回复
我只是个小白 过来看看 顺便学习下
ytianran 2016-07-05
  • 打赏
  • 举报
回复
不过你说b是不规则的多边形,但不影响图片还是二阶矩阵的形式,如果ab大小不一,那需要进行放缩 渐变透明是基于alpha值上的 所以只要对两张图片进行alpha混合就行了,不懂opengl,没有类似函数的话自己写个不就好
qq_35514457 2016-07-05
  • 打赏
  • 举报
回复
我只是个小白 过来看看 顺便学习下
hero-king 2016-07-05
  • 打赏
  • 举报
回复
每日都来一评!
qq_35045802 2016-07-05
  • 打赏
  • 举报
回复
的撒打算倒萨法师粉阿斯
jiayou3210 2016-07-05
  • 打赏
  • 举报
回复
不错学到老活到老
王小笨1314 2016-07-05
  • 打赏
  • 举报
回复
科学家 2016-07-05
  • 打赏
  • 举报
回复
用CImage(即:CAtlImage)类!不难
ruoyu5211314 2016-07-04
  • 打赏
  • 举报
回复
谢谢分享 学习
qq_35506420 2016-07-04
  • 打赏
  • 举报
回复
额谢谢分享 学习
qq_35477837 2016-07-01
  • 打赏
  • 举报
回复
@gz_qmc 之前用的是: dc.SetMapMode(MM_TEXT); dc.DPtoLP(&m_startPoint); dc.DPtoLP(&m_OldPoint); 跟上贴中的有些差异,但是都不能实现我的目的;注释掉也不能实现目的。
gz_qmc 2016-07-01
  • 打赏
  • 举报
回复
只大概瞟了一眼 因为不是在OnDraw或者OnPaint里使用dc 所以看起来很恼火 你把 dc.SetMapMode(MM_HIMETRIC); dc.LPtoDP(&m_startPoint); dc.LPtoDP(&m_OldPoint); 这三个卵东西去掉试试 或者注释掉
加载更多回复(10)

19,468

社区成员

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

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