最快的找图方案,对比数据最少

易语言 2020-07-21 00:07:33

最快的找图方案,对比数据最少

640X480图片局部寻找200X50的图片耗时:0秒

.子程序 找图24位, 逻辑型, 公开, 绝对找图,其中子图必须是源图的一部分
.参数 源图数据, 字节集, , 大图
.参数 子图数据, 字节集, , 小图
.参数 位置参考, 矩形_, 参考, 找到的位置
.局部变量 图宽度, , , "3"
.局部变量 图高度, , , "3"
.局部变量 图大小, , , "2"
.局部变量 图数宽, , , "2"
.局部变量 纵, , , "4"
.局部变量 横, , , "4"
.局部变量 数, , , "2"
.局部变量 点, , , "3"
.局部变量 首, , , "3"

' 到24位图 (源图数据)
' 到24位图 (子图数据)
图宽度 [1] = 取字节集数据 (源图数据, #整数型, 19)
图高度 [1] = 取字节集数据 (源图数据, #整数型, 23)
图数宽 [1] = 图宽度 [1] × 3 + 位与 (图宽度 [1], 3)
图大小 [1] = 图数宽 [1] × 图高度 [1] + 取字节集数据 (源图数据, #整数型, 11)
图宽度 [2] = 取字节集数据 (子图数据, #整数型, 19)
图高度 [2] = 取字节集数据 (子图数据, #整数型, 23)
图数宽 [2] = 图宽度 [2] × 3 + 位与 (图宽度 [2], 3)
图大小 [2] = 图数宽 [2] × 图高度 [2] + 取字节集数据 (子图数据, #整数型, 11)
.如果真 (图宽度 [1] > 图宽度 [2] 且 图高度 [1] > 图高度 [2])
图宽度 [3] = 图宽度 [1] - 图宽度 [2] + 1
图高度 [3] = 图高度 [1] - 图高度 [2] + 1
点 [1] = 图大小 [2] - 图数宽 [2] + 3
.计次循环首 (图高度 [3], 纵 [1])
首 [1] = 取首点24位 (图大小 [1], 图数宽 [1], 纵 [1], 0)
.计次循环首 (图宽度 [3], 横 [1])
首 [1] = 值加3 (首 [1])
.如果真 (源图数据 [首 [1]] = 子图数据 [点 [1]])
.如果真 (源图数据 [值减1 (首 [1])] = 子图数据 [值减1 (点 [1])])
.如果真 (源图数据 [值减2 (首 [1])] = 子图数据 [值减2 (点 [1])])
纵 [3] = 纵 [1]
.计次循环首 (图高度 [2], 纵 [2])
点 [2] = 取首点24位 (图大小 [2], 图数宽 [2], 纵 [2], 0)
首 [2] = 取首点24位 (图大小 [1], 图数宽 [1], 纵 [3], 值减1 (横 [1]))
.计次循环首 (图宽度 [2], 横 [2])
点 [2] = 值加3 (点 [2])
首 [2] = 值加3 (首 [2])
.如果 (源图数据 [首 [2]] = 子图数据 [点 [2]])
.如果 (源图数据 [值减1 (首 [2])] = 子图数据 [值减1 (点 [2])])
.如果真 (源图数据 [值减2 (首 [2])] ≠ 子图数据 [值减2 (点 [2])])
跳出循环 ()
.如果真结束

.否则
跳出循环 ()
.如果结束

.否则
跳出循环 ()
.如果结束

.计次循环尾 ()
.如果真 (横 [2] ≤ 图宽度 [2])
跳出循环 ()
.如果真结束
纵 [3] = 值加1 (纵 [3])
.计次循环尾 ()
.如果真 (纵 [2] > 图高度 [2])
位置参考.左 = 横 [1] - 1
位置参考.上 = 纵 [1] - 1
位置参考.右 = 位置参考.左 + 图宽度 [2]
位置参考.下 = 位置参考.上 + 图高度 [2]
返回 (真)
.如果真结束

.如果真结束

.如果真结束

.如果真结束

.计次循环尾 ()
.计次循环尾 ()