如何找到适合预定尺寸的宽高比 4:3 的尺寸?
Posted
技术标签:
【中文标题】如何找到适合预定尺寸的宽高比 4:3 的尺寸?【英文标题】:How do I find a dimension of aspect ratio 4:3 which fits within a predetermined size? 【发布时间】:2009-09-02 09:49:27 【问题描述】:这里的问题是我有一个大小为 x x y 的显示窗口,我需要在窗口内显示图像而不进行任何滚动,并保持 4:3 的纵横比。我有以下 sn-p 代码:
// Lock the current height, calculate new width of the canvas and scale the viewport.
// get width of the movie canvas
qreal width = canvas_->width();
// Find the height of the video
qreal height = (width/4.0) * 3;
// find original width and height for video to calculate scaling factor
qreal videoWidth = movieData_->GetWidth();
qreal videoHeight = movieData_->GetHeight();
// calculate scaling factor
qreal scaleFactorWidth = width/videoWidth;
qreal scaleFactorHeight = height/videoHeight;
当然,通过使用高度或宽度作为“锚点”,新图像会以一种或其他方式导致滚动(假设原始图像首先大于窗口)。如何找到适合预定尺寸的宽高比为 4:3 的尺寸?
编辑 我需要为 x 和 y 传入一个比例因子来进行缩放
canvas_->scale(scaleFactorWidth, scaleFactorHeight);
【问题讨论】:
【参考方案1】:只需取两个计算值中的最小值:
scale = min(scaleFactorWidth, scaleFactorHeight)
或者(如果你想要外装)
scale = max(scaleFactorWidth, scaleFactorHeight)
【讨论】:
我不确定我是否理解;我需要 x 和 y 的比例因子。 @Extrakun,两者的比例因子相同,否则您最终会得到不成比例的图像。 对,scale_x = scale_y = scale。这是保持纵横比的唯一方法。【参考方案2】: struct dimensions resize_to_fit_in(struct dimensions a, struct dimensions b)
double wf, hf, f;
struct dimensions out;
wf = (double) b.w / a.w;
hf = (double) b.h / a.h;
if (wf > hf)
f = hf;
else
f = wf;
out.w = a.w * f;
out.h = a.h * f;
return out;
这里是 C 版本,其中返回的尺寸将是尺寸“a”,适合尺寸“b”,而不会丢失纵横比。
【讨论】:
【参考方案3】:找出宽度w
和高度h
这两个值中的最大值。假设您的最大宽度 x
高度为 100 x
80。请注意,100/80 = 1.25。
案例 1:如果是 w/h > 1.25
,则将 w
除以 100 得到原始尺寸与新尺寸的比率。然后将h
乘以该比率。
案例 2:否则,然后将 h
除以 80 以获得原始大小与新大小的比率。然后将w
乘以该比率。
【讨论】:
不,它不是正方形。我想我可能只是不断减小我想要的宽度,直到我得到一个适合预定尺寸的高度?【参考方案4】:这是您所要求的 ActionScript 版本(在保持纵横比的同时调整大小)...应该不难移植到任何内容:
private static function resizeTo(dispObj:DisplayObject, width:Number, height:Number) : void
var ar:Number = width / height;
var dispObjAr:Number = dispObj.width/dispObj.height;
if (ar < dispObjAr)
dispObj.width = width;
dispObj.height = width / dispObjAr;
else
dispObj.height = height;
dispObj.width = height * dispObjAr;
return;
编辑:为了保持 4:3,源图像需要是 4:3
【讨论】:
以上是关于如何找到适合预定尺寸的宽高比 4:3 的尺寸?的主要内容,如果未能解决你的问题,请参考以下文章