新手求教 我用GetPixel函数得到像素的为什么都是白色

y3358677 2010-02-26 06:30:52
我想获取网页上某点的RGB,先用hdc=GetDC(hwnd)(hwnd是网页的窗口句柄)
再调用COLORREF color= GetPixel(hdc,point.x,point.y)(point是任意取的点)
为什么不管坐标怎么变,得到的color都是(255,255,255),哪位大哥帮个忙指点一下(最后也用ReleaseDC(hwnd,hdc释放了啊)
...全文
536 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
hi_dzj 2011-03-27
  • 打赏
  • 举报
回复
同问,
1.还有为什么我画橡皮筋类CRectTracker,反向画矩形时GetPixel所获取的像素值不是我鼠标当前所指的像素值??? 那个值好像闪了一下又变成RGB(0,0,0)了??
2.并且如果我用GetDC(NULL)中作为DC句柄来GetPixel的话,运行非常慢(我是在一个全屏的对话框中取像素)
icansaymyabc 2010-03-01
  • 打赏
  • 举报
回复
引用 21 楼 y3358677 的回复:
各位大哥有没有办法用别的函数实现,在窗口处于后台的情况下去截取窗口某一点的像素吗
我需要在很多浏览器中截像素总不能一个个轮流放前台吧?


办法是有的,不过太过于困难了。

就是实现一个虚拟显示器或虚拟桌面。到时候把需要取屏的窗口移到虚拟桌面上去,这样就保证它不被挡住了,取屏之后移回真实桌面。做得好的话这个过程可以不让用户察觉。
dubiousway 2010-02-27
  • 打赏
  • 举报
回复
引用 21 楼 y3358677 的回复:
各位大哥有没有办法用别的函数实现,在窗口处于后台的情况下去截取窗口某一点的像素吗
我需要在很多浏览器中截像素总不能一个个轮流放前台吧?


这个基本不可能吧。毕竟,一个窗口从被遮住的地方出来,都是要重新绘制被遮挡的地方的。这就是WM_Paint阿。一旦被挡住,被挡住窗口当然没有原来内容啦
xiangweixing 2010-02-27
  • 打赏
  • 举报
回复
我觉得GetDC(NULL)比较方便合适
liuxiaobing2008 2010-02-27
  • 打赏
  • 举报
回复
没有接触过,呵呵
学习了~~~
y3358677 2010-02-27
  • 打赏
  • 举报
回复
各位大哥有没有办法用别的函数实现,在窗口处于后台的情况下去截取窗口某一点的像素吗
我需要在很多浏览器中截像素总不能一个个轮流放前台吧?
y3358677 2010-02-27
  • 打赏
  • 举报
回复
GetWindowDC(hwnd)和hdc=GetDC(hwnd)的效果都差不多我都试过,
关键是浏览器窗口不能被别的窗口挡住怎么克服,急需解决方案,
引用 18 楼 musiclee 的回复:
十有八九是DC的问题吧 。。试试先截屏(整个页面) 看行不行
dubiousway 2010-02-26
  • 打赏
  • 举报
回复
我又弄了一遍MSDN,

lz, 对于IE浏览器,hdc=GetDC(hwnd),不行,要用GetWindowDC(hwnd), hwnd 还是你用工具取得的句柄

我刚才自己作了一遍,没问题。可以一个pixel一个pixel得复制浏览器内容。用spy++取的句柄。
但是浏览器窗口不能被别的窗口挡住。
musiclee 2010-02-26
  • 打赏
  • 举报
回复
十有八九是DC的问题吧 。。试试先截屏(整个页面) 看行不行
icansaymyabc 2010-02-26
  • 打赏
  • 举报
回复
也就是说,在windows里,你休想操作别人的DC,不信你试试,你读不出他的颜色,也无法在那个DC上作图。

你再去弄弄QQ截图,我不信你能把背景窗口里看不见的内容给截下来。

只要是在屏幕上看得见的内容,你都可以取到。我说的把窗口弄到前台是为了取到完整的内容,当然只要你保证你要的内容没被挡住,不在前台也可以取。
y3358677 2010-02-26
  • 打赏
  • 举报
回复
晕!不会把
我见过用GetPixel能获取某。BMP图中任意像素点的RGB的程序,那他们怎么办到的呢,也没见要把图搁前台啊,再说如果这样那QQ截图是怎么实现的呢
还有
引用 15 楼 icansaymyabc 的回复:
刚才试了一下,只有 GetDC(NULL) 得到的 DC 和本程序的DC中才取得到颜色,在其它窗口DC中一律返回白色。

怀疑是系统安全策略不允许这样做的缘故,免得你写间谍程序盗窃其他应用程序的内容。

看来你只能变通一下了,就是在确保你要读取的窗口在前台的情况下把窗口坐标换算成屏幕坐标,在 GetDC(NULL) 中取值。
icansaymyabc 2010-02-26
  • 打赏
  • 举报
回复
刚才试了一下,只有 GetDC(NULL) 得到的 DC 和本程序的DC中才取得到颜色,在其它窗口DC中一律返回白色。

怀疑是系统安全策略不允许这样做的缘故,免得你写间谍程序盗窃其他应用程序的内容。

看来你只能变通一下了,就是在确保你要读取的窗口在前台的情况下把窗口坐标换算成屏幕坐标,在 GetDC(NULL) 中取值。
y3358677 2010-02-26
  • 打赏
  • 举报
回复

不懂!
为什么我用postmessage向这个窗口句柄发消息正确,用这个句柄取像素就不行呢?
引用 13 楼 macrojj 的回复:
很可能是你句柄错了

不一定就在你找到的窗口句柄绘图的。
macrojj 2010-02-26
  • 打赏
  • 举报
回复
很可能是你句柄错了

不一定就在你找到的窗口句柄绘图的。
y3358677 2010-02-26
  • 打赏
  • 举报
回复
我用一款软件测出来的,我向他发送过键盘消息,有回应,绝对正确
引用 11 楼 dubiousway 的回复:
hwnd)(hwnd是网页的窗口句柄 ,,是不是窗口句柄没对?

你怎么获得这个窗口句柄得?
dubiousway 2010-02-26
  • 打赏
  • 举报
回复
hwnd)(hwnd是网页的窗口句柄 ,,是不是窗口句柄没对?

你怎么获得这个窗口句柄得?
y3358677 2010-02-26
  • 打赏
  • 举报
回复
码基本上就这么点,前面加头文件,后面加显示RGB的值,坐标点我是乱取的,窗口句柄我用一个软件测出来的(句柄绝对是正确的,我向他发送过键盘消息,有回应)沃刚才找到一个和我很相似的问题,你可以取看看他的,应该和我的问题一样http://topic.csdn.net/u/20081020/15/35891DAB-FE40-407D-802F-27567BCBF7D5.html
引用 7 楼 y3358677 的回复:
createdc和getdc有什么区别? 能不能用createdc获得hwnd的dc?
y3358677 2010-02-26
  • 打赏
  • 举报
回复
代码基本上就这么点,前面加头文件,后面加显示RGB的值,坐标点我是乱取的,窗口句柄我用一个软件测出来的(句柄绝对是正确的,我向他发送过键盘消息,有回应)沃刚才找到一个和我很相似的问题,你可以取看看他的,应该和我的问题一样http://topic.csdn.net/u/20081020/15/35891DAB-FE40-407D-802F-27567BCBF7D5.html
引用 7 楼 y3358677 的回复:
createdc和getdc有什么区别? 能不能用createdc获得hwnd的dc?
icansaymyabc 2010-02-26
  • 打赏
  • 举报
回复
createdc和getdc所得到的dc没有差别。
要不你把你的完整代码贴出来看看
y3358677 2010-02-26
  • 打赏
  • 举报
回复
createdc和getdc有什么区别? 能不能用createdc获得hwnd的dc?
加载更多回复(6)

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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