首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多图像放置算法-拼贴算法

多图像放置算法-拼贴算法
EN

Stack Overflow用户
提问于 2010-08-28 19:51:16
回答 2查看 3.3K关注 0票数 6

我正在创建一个同时显示多个视频的应用程序(比方说2-10个视频)。我基本上是在寻找一种算法,可以帮助在屏幕上的视频放置。我面临的问题是,每个视频可能有不同的纵横比,我显然需要调整视频的大小,使它们都适合屏幕。但我想调整它们的大小,使它们适合我最大化使用屏幕的方式(并最小化宽高比失真)。此外,我希望用户能够增加一个或多个视频的大小,以便它在屏幕上占用更多的空间。因此,该算法应该是稳定的,因为放大一个视频并不会使所有的位置都跳来跳去。

我以一种语言不可知的方式问这个问题,而我使用视频的事实是无关紧要的,这个问题同样适用于静止图像。

那么,有没有人知道布局算法?

为了帮助澄清,这里有一个例子。我有三个视频,大小如下。我希望第一个视频占据大约50%的屏幕,最后两个视频占据大约25%的屏幕。

代码语言:javascript
复制
(464, 336) 50%
(624, 480) 25%
(608, 336) 25%

我如何将它们放在屏幕上(1024x800)来实现这一点?我想我应该先把屏幕一分为二,然后把第一个视频放在上半部分。然后,我会将底部的一半分成两部分,并尽可能地拟合剩下的两个视频。

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-28 21:02:23

这是装箱问题http://en.wikipedia.org/wiki/Bin_packing_problem的一个版本,它是NP难的,所以你需要选择一些合理的启发式方法。如果你不希望视频在调整大小时跳来跳去,你需要留下一堆额外的死区,或者自动缩小其他的。

除非你有一个很好的理由允许它,否则我建议要求宽高比保持固定。

建议:首先固定所有视频的高度,然后使用贪婪的first fit算法将其打包。初始高度将是总屏幕高度的整数部分。如果有人调整视频的大小,其他所有内容都会以相同的分数值缩小,并转移到可容纳的位置。

票数 3
EN

Stack Overflow用户

发布于 2010-08-28 20:48:56

平方根+基于四舍五入的逻辑。如果sqrt的余数小于0.5,则将结果向下舍入,将结果用作行/列计数,并将行或列计数加1;如果sqrt的剩余数为>= 0.5,则向上舍入结果并将其用作行/列计数。

代码语言:javascript
复制
10 videos = 4x3 (3.16; rounded down, so add 1 row or col)
9 videos = 3x3 (3; abs)
8 videos = 3x3 (2.82; round up)
7 videos = 3x3 (2.64; round up)
6 videos = 3x2 (2.44; round down, so add 1 row or col)
5 videos = 3x2 (2.23; round down, so add 1 row or col)
4 videos = 2x2 (2; abs)
3 videos = 2x2 (1.73; round up)
2 videos = split screen in half vertically or horizontally (however you'd like)
1 video = full screen

现在,这是为了让所有的视频都是“正方形”的,这可能是最好的选择,因为你真的不能轻易地解释存在于那里的不同分辨率/比率(除非它对你来说是静态的)。

因此,根据显示分辨率与视频分辨率的比率,网格周围会有填充空间,因此您希望网格居中。也就是说,一种选择是将“填充”空间除以行数(或cols),并将其用作视频之间的缓冲区。

一旦你有了行/列计数,并假设所有的视频都是相同的大小,你只需将屏幕宽度除以cols,将高度除以行数,你就得到了视频尺寸。

然后,将视频平铺到屏幕上--显然,在同样的情况下,网格上的一些点可能是空的。您可以检测该空间在网格上覆盖哪些行和协议,并将视频放在该特定行的中心。

如果你想“最大化”一个视频,那么提前确定“最大化”意味着多少空间。然后,在计算其他视频的大小之前,从屏幕分辨率中减去该像素占用空间。如果最大化意味着50%的屏幕,那么从网格中的视频数量中减去该视频,并从显示分辨率中减去50%的像素空间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3590643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档