在线等,怎样在图片上画点,画直线,并得到指定像素的坐标??先送100分

chary8088 2009-10-22 02:18:11
我把图片放进 图片控件里
1:怎样在图片上画点,画直线?
2:并得到指定像素的坐标??

...全文
602 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你在贴图的时候肯定指定了贴图的位置(坐标)了吧??
有了这个坐标然后还有鼠标点击的坐标值做一个运算不就能得到在图片中的位置了??!
chary8088 2009-10-22
  • 打赏
  • 举报
回复
哈哈,可以了;
//更改坐标系统原点
dc.SetViewportOrg(Recto.left, Recto.top);
用这个就可以搞定了,非常感谢,结贴
[Quote=引用 13 楼 fandh 的回复:]
这里面,要做一下坐标与像素之间的转换就可以了!
具体转换,可以看下面两个帖子:
http://topic.csdn.net/t/20060310/09/4605023.html
http://www.abc188.com/info/html/chengxusheji/C-C--/20080411/64788.html
[/Quote]
fandh 2009-10-22
  • 打赏
  • 举报
回复
这里面,要做一下坐标与像素之间的转换就可以了!
具体转换,可以看下面两个帖子:
http://topic.csdn.net/t/20060310/09/4605023.html
http://www.abc188.com/info/html/chengxusheji/C-C--/20080411/64788.html
chary8088 2009-10-22
  • 打赏
  • 举报
回复
多谢 fandh, 划线我明白怎么回事了;可是获取 指定点的坐标怎么获取??
GetPixel是像素值,不是坐标哦

[Quote=引用 11 楼 fandh 的回复:]
比如你将图片装载到一个bitmap,句柄是m_hBitmap
CDC memdc;
memdc.CreateCompatibleDC( pDC );// 创建一个设备上下文来记忆上面的设备上下文。也是与m_pictureshow相兼容的设备上下文
memdc.SelectObject(m_hBitmap);// 把设备上下文给m_hBitmap。也就是设备上下文中存储了m_hBitmap。
memdc.LineTo(....);
memdc.GetPixel(...);
memdc.SelectObject(oldbmp );
DeleteObject(m_hBitmap);
memdc.DeleteDC();

大概就是这样的!
[/Quote]
fandh 2009-10-22
  • 打赏
  • 举报
回复
比如你将图片装载到一个bitmap,句柄是m_hBitmap
CDC memdc;
memdc.CreateCompatibleDC( pDC );// 创建一个设备上下文来记忆上面的设备上下文。也是与m_pictureshow相兼容的设备上下文
memdc.SelectObject(m_hBitmap);// 把设备上下文给m_hBitmap。也就是设备上下文中存储了m_hBitmap。
memdc.LineTo(....);
memdc.GetPixel(...);
memdc.SelectObject(oldbmp );
DeleteObject(m_hBitmap);
memdc.DeleteDC();

大概就是这样的!
fandh 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 chary8088 的回复:]
问题是怎么画,LineTo??引用 4 楼 fandh 的回复:
在图片上画点与画线,先要装载图片,然后,与画图设备关联,最后,在画图设备上面画,画完后,保存图片!
得到指定像素的坐标用GetPixel函数,一样要与画图设备关联!

[/Quote]
对,你关联的设备DC,就用DC->LineTo()
chary8088 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dkbrain 的回复:]
GetPixelAddress获取图像数据的地址,然后再操作,这样效率会高很多,GetPixel速度是非常慢的,如果你要处理的点非常多,运行的时候等都等到你死。
[/Quote]

我现在是不用GetPixel,是获取像素的坐标哦,不是像素的值;这个坐标是相对于图片的坐标
dkbrain 2009-10-22
  • 打赏
  • 举报
回复
GetPixelAddress获取图像数据的地址,然后再操作,这样效率会高很多,GetPixel速度是非常慢的,如果你要处理的点非常多,运行的时候等都等到你死。
chary8088 2009-10-22
  • 打赏
  • 举报
回复
GetDlgItem(IDC_PICTURE1)->ScreenToClient(&pt);//这个点坐标就是了

这个坐标是相对于 程序左上角的,不是相对于图片的坐标哦
chary8088 2009-10-22
  • 打赏
  • 举报
回复
问题是怎么画,LineTo??[Quote=引用 4 楼 fandh 的回复:]
在图片上画点与画线,先要装载图片,然后,与画图设备关联,最后,在画图设备上面画,画完后,保存图片!
得到指定像素的坐标用GetPixel函数,一样要与画图设备关联!
[/Quote]
fishion 2009-10-22
  • 打赏
  • 举报
回复
你用的是图片控件的话,就可以直接在
PreTranslateMessage中处理W
if(pMsg->msg == M_LBUTTONDOWN && pMsg->hwnd == GetDlgItem(IDC_PICTURE1)->m_hWnd)
{
CPoint pt = pMsg->pt;
GetDlgItem(IDC_PICTURE1)->ScreenToClient(&pt);//这个点坐标就是了
}
fandh 2009-10-22
  • 打赏
  • 举报
回复
在图片上画点与画线,先要装载图片,然后,与画图设备关联,最后,在画图设备上面画,画完后,保存图片!
得到指定像素的坐标用GetPixel函数,一样要与画图设备关联!
chary8088 2009-10-22
  • 打赏
  • 举报
回复
TO LS,我是得到指定点(像素)的坐标,也就是我用鼠标点一下,就知道这个点的坐标,在图片里的坐标啊
laviewpbt 2009-10-22
  • 打赏
  • 举报
回复
GetPixel(x, y)
chary8088 2009-10-22
  • 打赏
  • 举报
回复
for (x = 0; x < bmpWidth; x++)
for (y = 0; y < bmpHeight; y++)
if (pDC-> GetPixel(x, y) == clrYour)
reuturn CPoint(x, y);

这样可以得到所有像素的坐标,但是怎么得到指定点的坐标呢,这个坐标是相对于图像本身来说的

19,468

社区成员

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

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