找回密码
 加入
搜索
查看: 7579|回复: 17

[AU3基础] 问个关于截屏的思路

 火.. [复制链接]
发表于 2011-5-19 23:23:30 | 显示全部楼层 |阅读模式
如picpick或FSCapture之类的截屏软件里的有个截屏模式:手绘区域,就是用鼠标随手画个范围,它们就截屏成鼠标轨迹的范围,实现的思路是啥?
发表于 2011-5-19 23:35:53 | 显示全部楼层
说个猜想的
1.循环取鼠标坐标,存入数组(假设数据模型里面,每个像素点存为一个值,用的时候再拆出来).直至手绘区域完成
2.计算手绘区域的矩形区域,定义两维数组
3.取矩形区域的颜色,并存入数组
4.计算矩形区域里每一行(y坐标)需要获取的x坐标范围.
for y = yA to yB
     for x = start to end
          如果这坐标不在获取范围.把值设置为空
   next
next
5.根据坐标的颜色,把图画出来吧= =!
发表于 2011-5-20 00:10:06 | 显示全部楼层
回复 1# happytc
没用过你说的软件,一般见的软件都是取规则的矩形,这个处理起来很简单,
就是获得鼠标按下弹起的坐标,根据坐标,这个矩形就出来了,对角线的两点麽!
但是如果是不规则图形的话就比较费劲了,需要不停的返回鼠标的轨迹坐标,最后根据鼠标的坐标做出重合点的判断,以及你画的轨迹根本就没重合的话系统自动做最短距离的轨迹补偿。
因为整个屏幕都是由像素组成的,所以所谓的不规则图形其实也是有很多个小正方形组成的,也就是说扩大版得规则图形而已。即便如此判断起来也是很费劲的!
至于说如何根据像素生成图形就不用我介绍了吧!
 楼主| 发表于 2011-5-20 00:21:54 | 显示全部楼层
说个猜想的
1.循环取鼠标坐标,存入数组(假设数据模型里面,每个像素点存为一个值,用的时候再拆出来).直至手 ...
easefull 发表于 2011-5-19 23:35


估计不是这样的,若是“每个像素点存为一个值”,用Mousepos()能即时取到象素点的?
并且这个数组得多大呀,怎么提前定义大小呢?
发表于 2011-5-20 01:01:03 | 显示全部楼层
回复 3# love5173


    这N多方块想着都犯愁,如果手绘区域大点的话,循环取色CPU恐怕要出力咯
发表于 2011-5-20 01:09:26 | 显示全部楼层
回复 5# komaau3
确实,需要单独保存每个坐标的像素,最后还原成图像,
其实对cpu压力没有你想的那么大,整个屏幕才多少像素啊,即便返回整个屏幕的像素值保存起来也没有多大也就是几M 当然有的显卡特别好支持的分辨率很高那么能再大点,没那么大压力的,只是相对对于规则取图来说里面的算法是最让人学习的!
发表于 2011-5-20 01:11:57 | 显示全部楼层
好像我描述得有点不准确了.我的意思是.
在第一步的时候.把MousePos的返回值用','连接.用_ArrayAdd之类的方式添加到一维数组
在第二步是计算左上角和右下角.这时候再把数组的内容根据','拆分开来.

原因是这样子可以省掉x,y各自保存导致的个人思维混乱.
缺点是这样子多了两个步骤.
现在想想,似乎直接用二维数组,也不会造成思维混乱.(似乎喝多了的时候不该思考太复杂的东西= =!)

至于第3步需要定义的数组,就是从左上角到右下角的范围
至于数组元素似乎也没多大.最大也不过是@DesktopWidth * @DesktopHeight
按现在的显示器屏幕来看,也就是1920*1080 = 2,138,400
嗯,小于数组元素限制(16 777 216),还不用再另外加判断^_^

另外,最关键的就是5173说的.范围边界的补偿.
因为我之前设想的是手绘区域过程结束之前MouseGetPos间的延迟为sleep(20).假设MouseGetPos能获取每一个划取的坐标像素.然后在y坐标一致的情况下,只取x最小值和最大值充当y轴的获取范围.
但不排除有漏取的可能性(貌似这是可能最常见的情况).这时候就需要5173说的范围确定.

我的补充算法是:
设置相领两行最大值之间允许的误差值= $ierror
确定最上一行的x坐标最小和最大值.
(当前行x坐标最小值和上一行的x最小值相差 > $ierror)  and (当前行x坐标最小值 > 上一行的x最小值) 则当前行x坐标最小值 = 上一行的x最小值
(当前行x坐标最大值和上一行的x最大值相差 > $ierror)  and (当前行x坐标最大值 < 上一行的x最大值) 则当前行x坐标最大值 = 上一行的x最大值

当然,这算法肯定没有取方块范围的算法好.但好歹也能用不是^_^

另外,借贴问个问题:
如果我知道从1024*768范围内每个像素点的颜色值.怎么把这些数据变成.bmp图片文件?
 楼主| 发表于 2011-5-20 01:21:00 | 显示全部楼层
回复 3# love5173


    你可以试用下:http://www.newhua.com/softdown/61413_2.htm

现在在写一个截屏软件,已经把“全屏”,“活动窗口”, “窗口控件”,“鼠标拖矩形”, “固定区域”的截屏都 搞定了,现在对Picpick截屏7个模式里,还差两个:手绘区域和滚动截屏,手绘区域现在搞了下,还是有问题,所以来这一问。而滚动截屏,现在思路就是截很多图,然后拼图,但效果很差,还没有找到好办法。
 楼主| 发表于 2011-5-20 01:22:44 | 显示全部楼层
回复 5# komaau3

所以觉得思路不是这样子的

你可以试一下Picpick,它的确实现了,并且并不占什么cpu
http://www.newhua.com/softdown/61413_2.htm
发表于 2011-5-20 01:48:06 | 显示全部楼层
我之前做过测试:
PixelGetColor取1027*768范围的颜色值,保存到数组.整个过程只需要不到5秒(AMDx4 940,只用了单线程一个核心).这对于取静态图来说,并没有太大的影响.

至于需要手划区域截图的情况,范围应该远小于此,那现在的cpu更应该ok的.
 楼主| 发表于 2011-5-20 02:01:10 | 显示全部楼层
本帖最后由 happytc 于 2011-5-20 02:03 编辑

回复 7# easefull

“如果我知道从1024*768范围内每个像素点的颜色值.怎么把这些数据变成.bmp图片文件?” --- 个人觉得应该反过来,先取手绘中鼠标轨迹最边的四个点,先生矩形成图后,然后对于非手绘区域的点都直直接把它们的象素颜色变成白点。

其实这里还有个复杂问题:手绘时,会产生很多情形,如不是封闭的区域,如附图所示
还真不是简单得到鼠标轨坐标就可以了,还得怎么考到这些情况呢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-5-20 02:46:43 | 显示全部楼层
回复 11# happytc
解决方式如下
1、图简单,要求必须有重合点,如果不重合就要求使用者再画一次
2、这个比较麻烦了,
A、如果有重合点,并且有N个重合点的时候,如何判断到底取最大的图形面积,还是最小的图形面积?这个可以在软件里面设置,当做变量来处理!这个情况你没画!
B、如果有重合点,并且只有一个并且不是开始点,好吧这个成最简单的了,没什么可给你意见的,唯一一点就是舍弃数组里面这个重合点的前面部分,与重合点的后面部分,就是说把叉号多出去的两个尾巴割掉!最后只得出一个封闭的图形!如你的第一个图形!
C、如果没有重合点,也就是你上面的第二个图形的话,最好是给出直线补偿,这样是最简单的,就是起始点与结束点画个直线就是了,其实第三个跟第二个性质是一样的,先给予补偿,完毕后你会发现一切都迎刃而解了!
当然对于不规则取图我不知道你是如何来实现的,我的实现方式形象的比方一下吧,
就以最后那个螺纹来处理吧,
第一步先补偿,在起始点与结束点之间划条直线,
第二步,拿一支彩笔水平画一条线穿过这个图形,当第一次遇到红线(其实就是轨迹)的时候,把笔拿起来,当第二次遇到红线时把笔放下,一次类推,最后你会发现出来一个空白的区域是一个类似于C或者G的图形!
完全的迎合画图人的心理是不可能的,但是我给出的意见算是比较合理的解决方案!
但是我给的这个方法有一个难点,那就是奇点问题,比如画一个心性出来,就会出现两个奇点,对于奇点又要处理,总之比较麻烦的!
发表于 2011-5-20 04:47:27 | 显示全部楼层
本帖最后由 netegg 于 2011-5-20 05:36 编辑

保存手绘路径和整幅快照,叠加计算?不过想想看这个计算量好像太大了。应该有点像ps里的抠图吧

另外,给你一套函数研究研究吧,这套函数的介绍链接为free image,其中最后一项貌似说的是自由截图.
没有例子,翻译没有方向,凑合看吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-5-20 10:02:42 | 显示全部楼层
这个是我在七楼的补充算法效果图, 画得不好,将就看吧

我比较懒,就不去计算重合点和更细微的补偿了.这样子有问题的是第一幅图所说的情况,上面那区域是不必要的.
但如果使用者不这么画,而是划一个C,从顶点开始往下画,不交叉,那么就不会出现这种情况.
如果使用时出现这情况,那么就把图拿去PS切掉上面那部分吧——谁让他那么画手绘区域呢^_^

另外,再次问同一个问题:
假设我已经知道1024*768范围内每个像素点的GRB值.怎样才能把这些数据变成图片文件?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-5-25 11:54:46 | 显示全部楼层
有截图的源码,可以搜索看下...
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-20 08:50 , Processed in 0.087981 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表