继续努力,今天阅读 库指南-标准库-JSON 解析器、crypt 加密算法、key 键盘输入和sys 系统与设备。翻一遍,没怎么看,暂时用不到。今天解决了,图片打开后,自定义缩放的问题,但是又发现两个问题,一个是打开一个图片后,再打开另一个图片,新图片是绘制在旧图片之上的,旧图片仍在。设置用背景色清除后,切换不顺滑。另一个就是最大化后,图片没了。这是因为没有重绘逻辑 。根据ai建议,有两种方法,一种是onPaint,另一种是用plus控件。让ai分别给出代码,onPaint最后说嫌麻烦用plus控件,plus控件最后说如果后面需要把几张图真正合并成一张图保存,你还是需要用到 gdip.bitmap 和 gdip.graphics。这我就懵了。又问它你到底建议我哪种?它又给出我答案:在 aardio 拼图工具中,通常分为两个逻辑:1. 界面预览层 (UI Preview):给用户看的。使用 plus 控件,因为它处理缩放、居中、重绘最简单,不会让你的代码变得臃肿。2. 数据处理层 (Image Processing):真正的图片合成。使用 gdip (GDI+) 在后台内存中创建一个大的画布,按原图尺寸拼接,最后保存到硬盘。
都是你有道理是吧?嗯,你确实有道理。但我现在哪能考虑那么多。分版本吧,先关闭程序,aardio\project 目录中将“拼图工具”改为“拼图工具 v0.1”,再复制1个改为“拼图工具 v0.2”,现在打开程序,最近打开工程中已经没了“拼图工具”的记录,使用打开工程的方式,打开“拼图工具 v0.1”,修改各处的名称都加上版本v0.1,保存留档。同样的方法打开“拼图工具 v0.2”修改各处的名称都加上版本v0.2,现在我们在这个版本中用onPaint改写。经过实验ai提供的代码不能运行,onPaint 一会儿说支持,一会儿说不支持,后来又说wndproc拦截_WM_PAINT 消息,小小的智商不够用了。暂时放弃这个方案。看一下0.1版本的界面:
接下来用plus控件实现,按照ai给的代码,很快写好了。实现的非常好,重新上传图片切换的丝滑,最大化、还原最大化,都正常显示。代码行数从0.1版本的96行减少到63行(包括空行和注释)。但是又发现一点:最大化、还原最大化过程中有一段时间软件界面空白什么也没有。开启双缓冲改善了很多,但是大图仍然是有点慢。进一步优化将图片加载到内存,几百K的图片闪开。但是对于超大图,仍然吃力,可惜AI额度用完了。等明天继续优化。
知识点:
"剪牦牛毛"的名字来源于这样一个场景:你想做A,但做A之前要先做B,做B之前要先做C... 最后你发现自己在山上给一只牦牛剪毛——而你已经完全忘了最初想做什么。
这是一种递归式任务陷阱:每一步看起来都是"合理"的前置任务,但无数"合理"的前置任务叠加起来,就变成了一条无限延伸的兔子洞。
为什么会发生?