VB用GetPixel屏幕取色的几个问题

VB用GetPixel屏幕取色的几个问题,第1张

我不是太明确你第一个问题的意思。我的理解是你要对屏幕的某个目标进行取色。问题是如何确认这个目标的位置。如果目标是固定的坐标或者在固定的屏幕比例中出现,那么直接针对的计算坐标来取色即可。但我想你希望的是对一个不固定的坐标取色。那么多半是窗口坐标,这样的话可以获取窗口的DC来取色。总的来说,你必须确立一个参照坐标。

2,出错是因为并不是所有DC都支持GetPixel 和 SetPixel。例如win7的很多窗体,Java程序的窗体。不过DirectX的窗体好像是可以的。因为这个原因,考虑到兼容性需要,我往往是使用BitBlt来对一个像素点截屏再进行取色。一般来说BitBlt 不会让效率降低太多。可能几十倍而已,几千几百个点的话可以忽略。如果你是对大范围取色,BitBlt会比GetPixel更有效率。

3.读取jpg需要使用一些解码包会比较好,因为jpg的结构相当复杂,自己写代码会非常费事,事实上,我对JPG的结构还挺熟悉,但从来不敢想象自己写一个关于他的解压包。如果你是懒得找包的话,给你一个不太好的但可以处理的办法:使用JNI(Java native interface),他可以用作java 和c之间的界面, 由jdk自带。你可以在C里调度Java。java的 ImageIO.read(File file)方程可以直接读取bmp gif jpg 和 png 文件。读出来的BufferedImage 可以直接获取像素资料,但是效率不高,你可以从BufferedImage对象中获取 WritableRaster,然后获取DataBuffer 最后是直接的 byte 或者 int 数组数据。但是,前提是你要会JNI,同时JNI在C中调度Java的代码也是非常糟糕的,代码效率还可以,但代码会极度难看。如果真的决定使用JNI,那我建议你先用Java写一个 byte[] readJPG(String path)的方程然后再C调度这个方程获取 byte 数组,而不是直接从C调用ImageIO.read(),这样会省事非常多

但还是建议找C的解码包。给代码是不可能的,我原意话10分钟来回答问题,但不太原意话1小时来写代码。而且自己寻找答案会获得和学习更多。

最后如果你想要做的是图像识别,可以说jpg图片不是很好的选择,因为那是一种会丢失数据的文件格式,你用点对点的精确识别方法肯定(99.9999%)不能识别出图片。用模糊识别是要有很好的技术知识同时效率也会降低。建议使用BMP作为识别图片。BMP的解码包和源码网上一大堆。

在你的电脑桌面分辨率为1024*786或更高的情况下,将CS应用程序发送到桌面快捷方式,选中快捷方式图标点右键,属性,在目标后添加 -width 800 -height 600如:目标"E:\Counter Strike 1.6\cstrike.exe"修改后:目标"E:\Counter Strike 1.6\cstrike.exe" -width 800 -height 600注意exe"后面有个空格,这样,你进入游戏时就是窗口模式了,祝你玩的愉快。

如果帮助到您,请记得采纳为满意答案哈,谢谢!祝您生活愉快! vae.la

在一个图片上使用OpengL绘图, 在另一个透明图片上调用GDI函数TextOut输出文字,然后再调用GDI函数BitBlt把文字图片粘贴到OpenGL图片上。

新方法在xp上运行一切正常。

但是在win7上运行,会出现问题,主要表现为:只显示文字,不显示OpenGL图层。

后来总结,Win7下,同时使用OpenGL函数,和GDI绘图函数,会出现问题。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7870308.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存