我正在使用Arduino Mega 2560.我有两(2)个GLCD显示器连接到处理器。显示库是U2G2。我使用Arduino的IDE作为C ++编译器。
正在使用的BitMap文件格式为" xmp"并使用Gimp软件包生成生成的文件。
我需要能够将单色BitMap图像的大小从大约600x300减小到128x64。在研究这个问题时,我发现了几种方法,包括双线性,立方和BiCubic插值。这些文章中的大多数都处理颜色BMP文件,其结构与我正在使用的xbm文件完全不同。
我尝试使用双线性方法,但根本不起作用。
参考文章Image downscaling algorithm
最近,我在这个网站上发现了一篇关于Mark Ransom在2012年3月写的问题的文章。本文看起来是一个很好的方法,因为它使用平均技术,它似乎使用我正在使用的相同类型的图像。
在Mark的帖子中,他使用二维数组来存储源和目标BitMap图像。我不明白为什么。我一直在使用的图像都存储在一维数组中。我一直在使用的库都使用带有两个变量(宽度,高度)的单维数组来告诉库如何使用数据库。
如果我要使用二维数组,我必须将单维数据库转换为二维数组。一旦我运行例程来缩小图像尺寸,我就不得不将数据重新转换回一维数组,供显示驱动程序使用。好像很多工作。有什么想法??
在Mark的代码中,数组的一个维度表示" x"轴和另一个" y"轴。但是,由于我正在使用的数据库从左到右从上到下提供图像数据,其宽度为#34;变量提供回车/换行功能(可以这么说)真的不需要" y"轴阵列。在我看来,添加第二个维度只会使数据库的大小增加一倍。二维数据库将消耗2.048字节的RAM,目前我只有8k可以使用。我如何加载数组? x1 = 1, y1 = 1
代表" On"像素和x1 = 0, y1 = 0
for和" Off"像素?
据我所知,马克文章中的例程是一种平均方法。在我看来,代码一次只能处理一个字节的图像数据。考虑到xmp数据结构中的每个数据字节代表八(8)个像素,这是如何工作的?
由于数据库中的每个位代表一个像素,我真的需要在位级别进行平均吗?如果是这样的话,我们会做(4)点平均值吗?另外,你如何处理从一个字节到另一个字节的交叉?我做了一些拼接,但没有这种复杂程度。
我不是程序员,但我确实理解我要做的一些事情。我愿意付出任何努力和时间来理解这一点(我已经退休了)。