作者sxskr1001 (kerker~)
看板EzHotKey
标题[AHK-] PixelSearch,PixelGetColor耗费时间一问
时间Tue Oct 13 00:28:58 2015
一、情境叙述:
如果将一张 " 只有黑白两色的图片 " 切割成长宽 500*500 等份,
也就是 250,000 个小方格,
已知这 250,000 方格的中心点座标,要判别这些方格内中心点的颜色是否是 Color T,
并产出 500*500 的 1,0 矩阵於 excel 中,
二、已知方法:
方法一:请问是用回圈一个一个点用 pixelgetcolor or pixelsearch 搜
方法二:一次搜一列,假设黑中心点是 1,白中心点是 0,
撷取一列中心点颜色为范例如下
1 1 1 0 0 1 0 1 1
假设起 始点座标 与 终点座标 分别为 (X0,Y1) -> (X999,Y1)
由左到右用 PixelSearch 搜一条线从起点搜到终点,
假设搜到1,纪录座标 (X1,Y1) 後,
由 (X1,Y1) ~ (X999,Y1) 搜0(改搜白色),假设搜到0,纪录座标 (X2,Y1),
则我可以知道 X1 ~ X2 的方格都是1(黑色),然後记录在矩阵内,
三、尝试成果:
已经完成方法一,一分钟约可完成搜寻两千多格,因为太慢,所以想出法二,
目前法二还在构思怎麽写,也不确定法二是否比较快,之所以来问而不是直接实测,
这是因为实际图形不只两个颜色,我是为了简化问题所以才先来发问,
主要问是否法二比较快,因为如果要开发法二,会有很多其他的难题,还在考虑要
不要花时间去开发...
四、问题叙述:
1. 请问单纯就搜寻颜色的速度来讲,完成整个搜寻是方法一还是方法二较快?
2. 如果将图型存在剪贴簿 clipboard 变数中,可以针对在剪贴簿的图形搜某点的
颜色吗?
3. 如果将图型存成档案,可以直接针对该档案搜某座边点的颜色吗?
(因为现在是针对萤幕上的座标搜)
4. 有没有其他方法可以加快算出这 500*500 的颜色数值矩阵?
(目前有想到的是使用 AHK_H 的多线程,不过似乎蛮难实现的,而且电脑太烂似乎
效果也不好,先排除这个选项吧)
最後,为答谢回覆此问题的好心人,会依照回答比例送出 p 币 (1000 ~ 8000),
或是如果你有很好的想法,站内信讨论报酬也是可以的喔:)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.227.110.220
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/EzHotKey/M.1444667341.A.ACC.html
※ 编辑: sxskr1001 (36.227.110.220), 10/13/2015 00:31:15
1F:→ edwin96017: 为什麽要搜黑搜白?不能跑一次只找白剩下不就是黑的? 10/13 21:47
你好~感谢你的提问~~因为要定位哪些座标的方格是什麽颜色,
所以一次搜一个点我觉得不够快,所以逻辑改成一次搜一条线,
这条线就是方格中心点连成的线,线的起点与终点就是搜黑再搜白决定
※ 编辑: sxskr1001 (114.36.71.248), 10/14/2015 21:05:56
2F:→ logs: 不太明白你的问题,是因为500^2个点太多了吗? 10/15 23:56
3F:→ logs: 但你的方法二,似乎暗示图形有模式?否则怎能设计方法? 10/15 23:57
4F:→ logs: 不明白的是你方法二因循的逻辑或模式 10/15 23:58
5F:→ logs: 虽然 500^2 个点不是很大的数目,只是对直译式语言会很吃力 10/15 23:59
6F:→ logs: 你可以试试呼叫用API,直接做影像处理,速度理论上快很多 10/15 23:59
7F:→ logs: 可以现成使用的有 gdip_All.ahk 里头有一个 GDIP_GetPixel() 10/16 00:01
的确是因为一个一个搜250000个点太慢所以要想了方法二;
方法二诚如大大所言是因循一个逻辑去设计,似乎是情境叙述的不够精确导致难懂,
我的图是由一个个方格组成,假设每个方格内颜色一致,
然後我知道所有方格可能的颜色,我的目标是获得是否是某一颜色的矩阵,
我一有空会测试大大所说的GDIP_GetP,希望有机会可能和你讨教^^
等等1500p附上,感谢你提供的资讯 :)
等如果事成有大幅改进再把後续礼金奉上~
※ 编辑: sxskr1001 (111.184.14.201), 10/16/2015 22:32:26
※ 编辑: sxskr1001 (111.184.14.201), 10/16/2015 22:35:01