我想绘制一个图库,我在要执行的算法中遇到一些问题。
基本上我的面积为1000x700,我希望填充此区域的最大预览。这些图像位于图像列表中,所有图像必须大小相同。此图库仅在该区域中预览,其大小与每张图像的原始大小不匹配。
任何人都可以给我一个伪算法的概述,以便我可以构建它吗?
谢谢!
答案 0 :(得分:1)
您的问题可以简化为查找图像表格布局的行数和列数的问题,以便:
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 = sqrt(700*k/1000)
cols = sqrt(1000*k/700)
棘手的部分是行和列需要舍入为整数,同时确保行* cols&gt; = k(即表格布局中有足够的单元格来容纳每个图像)。
根据经验,我会尝试向上舍入较小的维度(行),然后向下舍入较大的维度(列)。
rows = ceiling(sqrt(700*k/1000))
cols = floor(sqrt(1000*k/700))
如果您发现这并不总是有效,那么您可能需要类似
的内容if (rows * cols < k) rows = rows + 1;
一旦知道布局的行数和列数,并确定图像之间边距的大小,就可以轻松计算缩略图所需的尺寸。
答案 1 :(得分:0)
这是一种搜索算法。
首先编写一个试图在区域内布置给定大小的缩略图的函数。如果所有缩略图都适合,则返回true,否则返回false。
采取该区域的最短边(700)。试试那个尺寸的缩略图。使用您的功能,看它适合。
如果不合适,请尝试下一个可能的尺寸(700/2)。
如果不适合,请尝试下一个(700/3)等。
这是一个合理的算法。通过注意到可能有其他可能的尺寸,您可以做得更好。 (1000(不起作用,但序列简单),700,1000 / 2,700 / 2,1000 / 3,700 / 3,1000 / 4 ...
尝试将其转换为代码,如果无法使其工作,请返回您已完成的工作。