0

我想绘制一个图片库,我在要执行的算法中遇到了一些问题。

基本上我有一个1000x700的区域,我想填充这个区域最大预览。这些图像位于图像列表中,所有图像的大小必须相同。这个画廊只是一个预览,在这个区域的大小与每个图像的原始大小不匹配。

谁能给我一个伪算法的概述,以便我可以构建它?

谢谢!

4

2 回答 2

1

您的问题可以简化为查找图像表格布局的行数和列数的问题,例如:

  1. 表格的纵横比(定义为列/行)尽可能接近画廊的纵横比 (1000/700)。
  2. columns * rows 大致等于要显示的图像数量。更准确地说,如果 k 是要显示的图像数量,则columns * (rows-1) < k <= columns * rows

约束1大致为:

cols / rows = 1000/700

约束2大致为:

cols * rows = k (where k is the number of images to be displayed)

根据 k 求解 rows 和 cols 可以得到:

rows = sqrt(700*k/1000)

cols = sqrt(1000*k/700)

棘手的部分是 rows 和 cols 需要四舍五入为整数,同时确保 rows * cols >= k (即您的表格布局中有足够的单元格来容纳每个图像)。

根据经验,我会尝试将较小的尺寸(行)向上舍入,将较大的尺寸(列)向下舍入。

rows = ceiling(sqrt(700*k/1000))

cols = floor(sqrt(1000*k/700))

如果您发现这并不总是有效,那么您可能需要类似的东西

if (rows * cols < k) rows = rows + 1;

一旦您知道布局的行数和列数,并确定图像之间的边距大小,您就可以轻松计算所需的缩略图尺寸。

于 2013-05-13T15:03:04.420 回答
0

这是一种搜索算法。

首先编写一个函数,尝试在区域内布置给定大小的缩略图。如果所有缩略图都适合,则返回 true,否则返回 false。

取区域的最短边 (700)。试试那个大小的缩略图。使用您的功能,看看它是否合适。

如果不合适,请尝试下一个可能的尺寸 (700/2)。

如果不合适,请尝试下一个 (700/3) 等。

这是一个合理的算法。您可以通过注意还有一些其他可能的尺寸可能会使其变得更好。(1000(不起作用,但使序列更容易),700、1000/2、700/2、1000/3、700/3、1000/4...

尝试将其转换为代码,如果无法正常工作,请返回您所做的工作。

于 2013-05-12T23:34:58.460 回答