Excel 像素化图像创建器
使用 Excel 工作表的单元格作为像素渲染真实图像(用于娱乐和实验)。
引言
这个小项目是使用 Excel 工作表的单元格作为像素来渲染真实图像。 它需要 .NET 4.5 和本地 Excel 才能运行。 它是用 C#/Winform/VS 2013 编写的。
背景
基本上,Winform 应用程序从您的硬盘驱动器中选择一张图像,并启动 Excel 以使用工作表单元格渲染所选图像。
简要的运行过程如下
- 它根据您的 UI 输入(单位、列等)选择图像并将其重新采样到内存中。
- 它启动 Excel,使电子表格单元格看起来像正方形以模拟一个大像素。
- 它以线性方式或随机方式扫描内存中的重新采样的图像(我更喜欢随机方式,这种效果看起非常有趣)。
- 它逐个更改单元格的背景颜色(以线性顺序或随机顺序)。
(这是该应用程序的样子。)
(它正在以随机方式在 Excel 中渲染。)
(渲染完成。)
Using the Code
代码非常简单。 它使用 VS 2013(或更高版本)、.NET 4.5、C# 和 Winform。
确保您已正确引用 Office Interop Excel。
关注点
- 运行进度弹出窗口
最初,我以为我需要进行 async/await 来制作一个像样的进度弹出窗口。 但你知道,这么多年过去了,这种所谓的“长运行”流程处理框架仍然难以使用,除非你每天都这样做。 另外,你必须用这个新的 async/await 处理 COM+/Office Interop。 我做了一些实验,我决定采用另一种方法。
事实证明,一个普通的调用就可以很好地处理它。 也许是因为 Office Interop,系统已经处理了这种异步、工作线程、UI 线程切换的传闻。 坦率地说,我不知道。 但它有效。
您可以看到黄色标记的代码,没有花哨的 async/await 东西,但仍然可以顺利完成任务。
显然,上述方法仍然缺少一个功能:“
取消
”。要在半途取消一个长时间运行的进程,伙计们,这并不是一件容易的事。 这是一个高级主题,并且是根据情况而定的(有时候,你想回滚,有时候你只想结束它……)。 我正忙着过自己的生活,而且这个“功能”实际上扰乱了这个小项目的主要目的,所以……
- 性能
如果你用大尺寸图像或超小单元格(通过更改单元格单位大小)弄乱了这个小应用程序,它会变得非常慢。 请记住,Excel 工作表有局限性(1048576 行 X 16384 列)。 但在你尝试那些数字之前,我在我的代码注释中警告过你
- 再次关于性能
在我的实验中,在图像渲染时,如果“焦点”在 Excel 上,它会很慢。 但是如果“焦点”在 Excel 之外,它会更快。 别问我为什么。 如果你想弄清楚,尽情折腾吧,这完全是你的。 但我的谦虚的方法只是确保应用程序获得焦点。
你相信吗? 这是 2017 年和 .NET 5.0 时代(对吗?) 当你想做一些像“切换焦点”这样的基本事情时,你仍然不得不依赖全能的 WIN32!
- 随机化
我将默认渲染效果设置为“随机化”。 看着很有趣。 在我的注释中对此进行了很好的记录。 这里也提醒一下:它不是“真正的”随机方法。 它只是足以欺骗人的眼睛。
- 测试图像
我放了一张“这个人”的照片作为测试图像,方便您使用。 它被打包在源代码 zip 中。
就这样! 只需下载源代码并试用。 我认为我的注释对你理解代码也很有帮助。
源代码解决方案项目可以从 这里下载。
我还制作了一个 YouTube 视频来展示它的运行方式。 玩得开心
历史
- 2017 年 8 月 30 日:初始版本