将图像放在屏幕上的算法“很好”

时间:2012-04-25 19:23:46

标签: image algorithm

注意:这不适用于网页,它是一个包含一组图像的简单程序,会随机选取一些图像并在屏幕上显示。想象一下,使用图像编辑器并在画布上手动定位导入的图像。

我很难想出一种在固定尺寸的屏幕上定位一组任意图像的方法(它只是一个窗口)

例如,如果我有一个图像,我可能只是将它放在屏幕的中心。

          |

如果我有两张图片,我会尝试将它们放在屏幕的中央,然后将它们水平展开,使它们看起来相对于彼此以及屏幕居中。

     |          |

但如果一张图像比另外两幅图像大呢?我可能有像

这样的东西
    |-----|

  |         |

同样,也许我有两个较大的和两个较小的

|-----|   |-----|

  |         |

这样大的一个出现在“后面”而小的出现在前面。

一些图像最终会覆盖其他图像的一部分是不可避免的,但我能做的最好的就是尽量使其尽可能有序。

我可以快速获取要绘制的每个图像对象的尺寸,并且绘制的图像数量有限制(从1到8,包括在内)。

可以在屏幕上的任何位置绘制图像,如果图像的任何部分位于屏幕之外,那么这些部分将被切断。所有图像的尺寸都小于屏幕尺寸,通常不大于整个屏幕的1/4。

解决此问题的好方法是什么?即使处理基本情况,例如有两个图像(可能有不同大小),也已经非常混乱了。

2 个答案:

答案 0 :(得分:1)

您可以将其视为2D bin packing problem,它将以“紧凑”的方式优化非重叠矩形,但不会考虑美学。

如果你想自己滚动,你可以尝试将所有图像放在画布上的网格上,中心到中心的间距足够大,没有图像重叠。然后将图像“压扁”在一起,从左到右,从上到下,以减少空白量。

答案 1 :(得分:0)

100%宽度和高度的html表(禁用溢出)是一个很好的起点IMO - 在第一次迭代中只需按照大小排序图片并制作8个模板,如:

  1. <tr><td><img></td></tr>
  2. <tr><td><img></td><td><img></td></tr>
  3. 2行,首先是colspan = 2
  4. ...
  5. 然后找到一些丑陋的案例并为它们制定特殊规则(例如3个垂直图像制作1行,......)