GM8图片排序、浏览 月度挑战
liureng 发表于 2018-11-08 03:40:29 183

问题

解决window7不能为文件排序的问题

环境

以前的解决方案

windowXP一样,用选择缩微图来排序

像看图软件一样,可浏览图片

素材来源

外部导入

操作要求

键盘操作

想像

文字描述

使用流程想像

输入图片文件夹路径,找到该文件夹下的所有图片。生成缩微图,选择图,插入排序,浏览图,返回排序。排序完成,按当前顺序从小到大重命名图片。

使用场景想像

不要UI,最大限度利用屏幕1920*1080,缩微图大小210*210

为最大限度提高内存使用,减少硬盘读取次数。排序和浏览独立为两个程序,用剪贴板传递数据。浏览可单独运行,方便固定大小截图、浏览图片。所以浏览在前为主,排序在后为辅。

不允许窗口模式运行

浏览

按下放大键,图片从中心逐渐放大。缩微图不变,黄色框从中心逐渐缩小。

按下缩小键,图片从中心逐渐缩小。缩微图不变,黄色框从中心逐渐放大。

排序

选择后,插入

文字绘制

浏览

屏幕上有图片(居中绘制)、缩微图(左对齐)、图框

排序

屏幕上有缩微图(左对齐)(选择后)、选框、插入符号、

GM设置

房间

1920 * 1080,以全屏方式启动,不支持窗口

运行速度60,加快读取图片的速度。

架构实现

运行逻辑流程

运行浏览.exe。设置单独运行或再打开排序.exe。

输入路径》查找路径文件夹下的所有图片》排序文件名

如果是单独运行》加载第一张图片

如果是双开》把路径通过参数传递,把排序好的文件名列表通过剪贴板传递》启动排序.exe,接收参数路径、文件名列表》生成缩微图》完成排序时,命名检测(避免重命名现象)

不需要拖动缩微图,简化刚开始制作时的结构


计划

先制作图片浏览.exe,再制作图片排序.exe。最后将两者融合。


浏览

资源加载

以背景图载入,不保存缩微图(减少内存占用,如果是小地图,可保存缩微图)

内存策略

方案一(舍弃),不要原图只要适合图,可以保留40张。考虑到排序本身就是欣赏图片的过程,适合图无法放大,观察得不够仔细。有些图太过相似,要放大前后对比,才能找到区别,方便排序。

方案二(舍弃),排序也保存几张原图,但考虑到55000*5000的图片就可以把内存占满。保存不了几张。所以意义不大。反而会造成系统复杂,不好扩展。

方案三(采用),加载失败时,释放最早的图片。不需要内存计算变量。失败,即释放。

模块

***接收分析字符***

***查找图片***

***文件名排序***

单独运行浏览

载入第一张图片,绘制居中适合图、缩微图、框

***绘制图***

draw_background_ext绘制图,GM有视野时,只会绘制视野内的图像,没有视野时,只会绘制房间内的图像。所以不用draw_background_part

***绘制缩微图***

draw_background_ext绘制缩微图

***绘制框***

draw_rectangle_color绘制框

技术难点:框与缩微图,房间与图的比例数学推导

浏览数据生成

缩微图的坐标不需要储存

加载图》图片索引,如果失败,释放最早加载的图片

计算图比例、图坐标、hzB

图片大小不一样。如果用固定的移动速度,则小图移动太快,大图移动太慢。所以移动速度需要根据图片大小乘以比例来计算。判断竖图横图后用div取整。

制作浏览数据二维数组表格

 

0

1

2

3

4

5

6

 

是否浏览过

图片索引

图的比例

图的坐标X

图的坐标Y

hzB

移动速度

文件名POS

 

 

 

 

 

 

 

生成第一张图的数据,储存当前浏览POS

POSlbNameSTRPOS


资源下载:

已更新图文使用说明、导出的exe文件

https://pan.baidu.com/s/1SE5juqkeqSb9l1wQnHXzxA

按回车键,完成排序,并自动命名数字。

最后于 2天前 被liureng编辑 ,原因:
最新回复 (11)
  • liureng 发表于 2018-11-09 03:52:20
    1 2

    浏览模块

    接收分析字符

    用一次输入解决问题。

    接口:字符。

    输出:路径、格式、是否单独运行

    根据路径:G:\小说\有声小说

    标识符不能是大写字母,应该是符号。

    分为四种情况:

    分为默认格式jpg,字符只有路径

    输入格式png/bmp/gif,加路径

    单独运行,加字符

    单独运行,加格式,加字符

    大体字符结构:是否单独,是否改变格式,路径

    `小写字母pbg代表格式,后面跟路径

    查找图片

    不要把文件名储存在数组中,虽然文件名不进行操作,但是文件名要从浏览传递到排序,需要ds_list_save

    文件名排序

    因为找到的文件顺序是储存顺序,需要按文件名排序

    列表的排序无法为数位不同的文件名正确排序。只能自己编写排序代码。当前的排序方式是根据windows批量命名的格式来提取数字的。从后面开始提取一个连续的数字。不能识别不连续的数字和字母、中文。

    不需要对文件名按从小到大的保存,只要保存排序后的POS列表即可。因为此后的排序,还要调整顺序。同样是POS列表对文件名列表的定位。但是要与延时加载缩微图,必须在开始时,POSPOS2、缩微图索引的顺序,三者必须一致。所以要调整文件名列表的顺序,按提取的数字从小到大排序好。

    单独绘制第一张图

    单个物体绘制顺序:绘制居中适合图》缩微图》框

    控制变量hzZJ

    图片draw_background_ext,以左上角0,0为原点

    问题:放大不是居中放大,是左上角放大

    改为居中放大,照顾用户习惯。要改动绘制坐标。

    缩微图draw_background_ext,以左上角0,0为原点

    黄框draw_rectangle,以缩微图左上角为原点


  • liureng 发表于 2018-11-10 04:37:51
    0 3

    制作上一张图下一张图操作

    操作切换时要限制最后一张不能下一张、第一张图不能上一张。

    当切换上一张下一张图时,保存当前图的数据,检测下一张是否已浏览。是就读取数据。否就生成数据。

    制作切换绘制原图或适合图操作

    注意切换后,绘制的是适合图。所以在上一张下一张的操作中有czTu2ZJ = 0;

    用两个脚本来分别输出图的比例和坐标

    未完成的计划(改进的想法)

    统一脚本的参数为POS2,把初始化的变量从脚本中提取出来,减少一个脚本。即使以后物体多,变量初始化需要用脚本,也应该是单独的变量初始化脚本。不要把变量初始化和数据计算混在一起。

     

    绘制像window一样,有默认输入包括单独运行、格式、路径的输入窗口。还有排序.exe的执行路径设置。


  • liureng 发表于 2018-11-11 05:40:52
    0 4

    排序绘制

    缩微图

    要实现每次加载部分图片,缩微图的索引必须和lbPai2Xv4POS的顺序一样。这样,才不会出现要加载的图片在45张的后面,而导致绘制第一屏时有缩微图没有加载。而如果缩微图索引和lbPai2Xv4POS一样,调整lbPai2Xv4POS时,就必须同时调整索引。加大程序运行时的计算量。所以为实现开始时加载一屏缩微图,文件名、索引、排序列表三者的顺序必须一样。生成完一屏45张缩微图后,剩余的图一次性全部生成。图片加载时间太长,什么时候可以操作不知道。要给个屏幕提示。加载完一屏后,不再用闹钟每步加载,而是直接在一步中加载。这样就会有鼠标的渗漏提示。而且速度也更快。

    加载剩余的图片

    用闹钟实现

    选框

    先用黑色覆盖上一步的选框,再用浅蓝色绘制当前位置选框

    用变量控制绘制,像键盘按键一样,方便对绘制模块的绘制顺序修改等


  • liureng 发表于 2018-11-12 04:13:09
    0 5


    排序

    控制

    分为正常、设置、读取等模式

    上下左右

    不要让选框去到没有图片的位置,耽误玩家的时间,去了还要回来。

    翻页

    向下翻页时,如果没有一整屏了,就计算向下移动的行数,不要让屏幕有空行。

    选择

    支持多选,创建选择列表,把选中的缩微图位置储存进列表

    再按选择键,取消选择,重绘该张缩微图

     把选框的屏幕x,y换算成POS2的第几张图片

    检测该POS2位置有没有添加进已选择列表

    如果已选择,则从已列表中删除该该POS2位置。并用黑色矩形覆盖蓝色半透明矩形(蓝色矩形的宽高是固定的,缩微图的宽高不固定。所以只是覆盖缩微图,有部分蓝色矩形就会没有覆盖),再绘制缩微图。

    没有选择,则将该POS2位置添加进已选择列表。在该位置绘制透明蓝色矩形。


  • liureng 发表于 2018-11-13 03:45:09
    0 6

    排序

    取消全部选中图片

    清空已选择列表

    赋值转换为选框

    绘制缩微图、选框

    向上或向下、翻页、左右刷新缩微图时,会把选定的图片的蓝色,刷没了?

    刷新时,检测选择列表,有值就逐个读取value,查找该value在顺序列表的顺序,看顺序是否在屏幕上,在就绘制蓝色选中矩形。

     

    确定键

    选择完后,

    按下确定键》选框变成插入符号》选框移动到要插入的地方(此时还可以再选择)》再按确定键(对选取的图片排序,确保后按当前POS2插入)插入,插入的位置是插入符号后面缩微图的位置。

    插入符号一个工字:上下两横Jian4Xi1K * 3的长度Jian4Xi1K的宽度,中间一竖Wan2Ge2Bian1的长度Jian4Xi1K的宽度。没有选择的时候,不能变成插入符号。变成插入符号后,如果玩家把选择的全部取消,则变成选框。

    排序

    定位

    替换

    删除》判断是否在插入位置前,在前就插入位置-1。因为如果列表中有两个一样的值,只会返回位置在前的值的位置。所以只能先删除,再插入。不然就只能自己去编写列表查找函数。

    插入

    清空选择列表

  • liureng 发表于 2018-11-14 03:38:27
    0 7

    排序

    插入:实现插入到最后,插入符号能移动到最后,即EndPOS2 + 1的位置

    下和右可以移动到最后。为降低代码复杂度,设置为当光标为插入符号时,只有右可移动到最后

    影响向上移动,当最后一张为hzKuang1INDx_now = hzWXnum 1时,向上移动就要出错。

    会不会影响插入、选择??

    所以为简化以上问题,当玩家想要右移动插入到最后时,即视为插入操作。光标不改变位置。

    因为插入后要传输数据给浏览,而信号是按下确定键。为防止触发正常的确定键操作,设置变量czInsertMODE=1;//操作插入模式:0是在最后一张自动插入,1是正常插入。在正常确定键操作前检测。

    完成

    检测命名

    最后完成排序时,如果已被GM命名过,再次以同样的名字命名时,就不会命名。因为windows有存在相同文件名,是否替换的对话框弹出。

     

    按下浏览键

    选框(或插入)的当前POS2传递到剪贴板

    将操作模式设为空闲(即切换到浏览)

    启动时间轴,自动切换程序

    浏览读取剪贴板的POS2

    检测是否已加载,已加载就读取数据绘制

    未加载就按POS2读取文件名、路径,加载图片

    切换出浏览,传递当前浏览的POS2到剪贴板。排序的选框跳到最后浏览的图片处。


  • liureng 发表于 2018-11-15 03:26:48
    0 8

    双开调试

    浏览和排序的切换键相同。如果标准模式按下切换键后,设置为空闲模式。一定会触发空闲模式下的直接检测切换按键。

    方案一:将浏览和排序的切换键设置为不同的按键。增加操作难度,舍弃。

    方案二:将模式设置放到自动切换时间轴的最后。增加阅读难度,舍弃。

    方案三:将切换程序和数据传输分开。

    切换键相同,按下即改变模式,防止再进行操作。触发自动切换时间轴。

    数据传输用模拟按键。两个程序分别用不同是数据传输标识符和不同的模拟按键。找两个不常用,不会触发其它程序快捷键的按键 浏览F9/排序F10。不能用F9F9GM的截图,需禁用。

  • liureng 发表于 2018-11-16 04:33:28
    1 9

    退出时可选择重启程序

    释放资源、重启创建事件

    排序:

    释放图片资源、清空数据结构

    把重启的信号传递进剪贴板

    空闲模式等待浏览的信号

    模拟数据传输按键

    切换到浏览

    浏览:

    空闲模式接收到重启信号

    释放图片资源、清空数据结构

    不改变模式

    输入路径

    查找、排序,生成lbNamePOS

    初始化lbPai2Xv4POS、数据数组

    将文件名列表传递进剪贴板

    模拟数据传输按键

    切换到排序

    排序:

    接收数据:后缀、路径、文件名列表

    初始化lbPai2Xv4POS

    创建表面,生成缩微图

    命名检测

     

    房间重启法:

    声名一个变量,是否重启

    两个程序的创建事件中有一部分是要执行的,有一部分不需要再执行(也可以执行,赋值很快,检测是否重启,没有重启就数据结构创建)。

  • liureng 发表于 2018-11-17 04:03:17
    0 10
    退出时可选择重启程序,这个功能失败了。
    运行到切换回排序时,无法正确切换,无法运行房间重启。原因不明。看来只能在下一个版本中去改进了。
  • 断水 发表于 2018-11-17 05:57:34
    0 11

    终于完成了啊。
    这里也可以贴出下载地址,试玩说明。
    活动结束之后,别人可以直接在这里看到

    可以的话,网盘里也可以包括已经导出好的exe文件。

  • liureng 发表于 2018-11-18 05:26:18
    0 12
    已更新图文使用说明和导出的exe
    在1楼,更新资源下载地址。