这是一种可能的方法,尽管我确信如果您能够编写代码来读取、操作和使用尚未发明的文件格式中的像素,您应该能够自己创建该文件;-)
您可以使用 ImageMagick 生成六边形网格,它安装在大多数 Linux 发行版上,并且适用于 OSX 和 Windows。在这里,我只是在终端的命令行上执行操作,但也有 Python、Perl、PHP、.Net、C/C++ 和其他绑定 - 所以您可以选择。
首先制作一个六边形网格 - 你必须计算出你需要的尺寸,我的是任意的:
convert -size 512x256 pattern:hexagons hexagons.png
现在,填充六边形,每个六边形都具有不同的颜色,我只是在这里做了一些洪水填充的示例来给您提供想法。理想情况下,您可以使用颜色
#000
为第一个(左上角)六边形着色,并使用 #001
为下一个六边形着色,以便您可以将输出图像的坐标作为连续颜色进行迭代。此外,根据您的输出图像大小,您可能需要使用 32 位 PNG 来容纳 hexels(六边形像素)的数量。
convert hexagons.png \
-fill red - draw "color 100,100 floodfill" \
-fill blue -draw "color 200,200 floodfill" \
colouredmask.png
现在迭代所有颜色,使每种颜色除了该颜色透明。请注意,我添加了黑色边框,以便您可以在 StackOverflow 的白色背景上看到上下文:
convert colouredmask.png -fill none +opaque red onecell.png
现在用该蒙版遮盖原始图像,获取该单元格的平均颜色,并将其写入您尚未发明的文件格式。对所有单元格/颜色重复此操作。
请注意,基本六边形图案为 30x18,因此您应该将网格大小设置为其倍数,以使其正确镶嵌。
请注意,如果您有很多要处理的数据,您应该考虑使用诸如 GNU Parallel 之类的工具来利用多核。因此,如果您制作一个名为
ProcessOneImage
的脚本并且您有 2,000 张图像要做,您将使用:
parallel ProcessOneImage ::: *.png
如果您的 PC 有 8 个内核,它会保持(比如说 8)个作业一直运行。还有很多选择,试试
man parallel
。
Fred 在他的网站上有一个 Imagemagick 脚本,可以执行您想要的操作:STAINEDGLASS
对于那些来这里寻找将方形像素转换为六边形像素(或其他方式)的人,这里有一些你可能更感兴趣的东西。
转换是双向的,一种是另一种的逆。 这里我看一下六边形->正方形像素的过程。我正在寻找一个面向“平顶”的六角像素系统。它与“点顶”一样有效 - 通过将过程定向 90 度。
六角像素与方形像素的比例使得方形像素的边长等于六角像素的高度(如果R是六角像素的边长,则方形像素将是R√3。因此,对于边长为 1.0 的六角形像素,方形像素的比例宽度将为 1.7320)
现在我们可以对每行方形像素使用相同的计算。
每个方形像素颜色将有三到五个六角形像素的贡献。 (反之亦然)。重复将在每个83正方形像素上进行,这也是十六进制点96。
(在该方法中,每个六角形点的测量值为六角形的 1.5 边长,因为每个六角形柱与其相邻柱共享其边缘)。
这个重复的要点是 83 √3 ≅ 1.5*96.
因此,需要考虑每个正方形像素的每个六角像素的贡献,并且可以轻松地为此目的构建一个查找表。如果我有时间的话,我将添加一个 python 片段来演示这一点。