|
发表于 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图片文件? |
|