我正在尝试将多个图像放在一个大图像中,我正在寻找一种能够最佳地确定放置位置的算法。图像无法旋转或调整大小,但生成图像中的位置并不重要。
编辑:未添加调整大小约束
答案 0 :(得分:3)
可能你正在寻找这样的事情:Automatic Magazine Layout。
答案 1 :(得分:2)
显然它被称为“打包问题”,这是游戏编程中经常使用的东西。对于那些感兴趣的人,这里有一些建议的实现:
答案 2 :(得分:0)
我为这些算法创建了一个算法,它实际上是NP-Hard Bin packing问题的变体,但具有无限的bin大小。
您可以尝试找一些关于它的文章并尝试优化您的算法,但最终它仍然是一种蛮力的方式来尝试各种可能性并尝试最小化最终的bin大小。
如果您不需要最佳解决方案,只需要一个解决方案,则可以避免强制执行所有组合。我创建了一个曾经做过的程序。
说明
Images: array of the input images
ResultMap: 2d array of Booleans
FinalImage: large image
ResultMap用于快速检查您是否可以在当前的FinalImage上放置图像。您可以优化它以使用int32并将每个位用于一个像素。这将减少内存并提高性能,因为您可以一次检查32位(使用掩码)。但它会变得更加困难,因为你必须考虑你需要为图像边缘制作的蒙版。
现在我将描述“算法”的真实循环。
这不是最优的,但它可以以合理的最佳方式解决问题(特别是如果有一些较小的图像最终填补了这些问题)。
答案 3 :(得分:0)
最佳打包很难,但根据问题域的详细信息,可能会有一些简化。一些想法:
如果你可以将你的位图划分成相同大小的瓷砖,那么打包就很简单了。然后,按需,您将从磁贴中重新组装位图。
将图像从最大到最小排序,然后,对于每个图像,使用贪婪分配器选择适合图像的第一个可用子矩形。
使用遗传算法。从几个随机选择的布局开始。根据他们的紧密程度对他们进行评分。混合来自最高得分的解决方案,并迭代直到达到可接受的分数。
答案 4 :(得分:-1)
答案 5 :(得分:-3)
以非编程方式,您可以使用MS Paint功能“粘贴自”,即将(JPEG)文件粘贴到mspaint图像区域。使用此功能,您可以排列单个图像,并创建最终的大图像并将其保存为JPEG / GIF / Raw-BMP格式。
-AD。