-1

私がこれを達成することを可能にする表現を探しています:

任意の幅/高さの画像があり、描画する前にその寸法を取得できます。
画像が非常に大きい場合があるので、縮小したいと思います。

私のキャンバスの幅はw、高さはhになります。
説明のために、320x240だとしましょう。

画像のサイズがキャンバスのサイズ以下の場合、スケール比は1になります。サイズが大きい場合は、キャンバスのサイズと比較してどれだけ大きいかに比例してスケールします。

たとえば、画像が640x480の場合、縮尺比は0.5になります
。画像が640x240の場合、縮尺比は0.5のままになります。320x480の
場合も同様です。

これは単一の数式で書くことができますか?例:

def scale_ratio(canvas_width、canvas_height、image_width、image_height)
   スケールを計算するための#math式
   収穫逓減
4

1 に答える 1

2
function scale(canvas_width, canvas_height, image_width, image_height) {
  return Math.min(Math.max(canvas_width / image_width, canvas_height / image_height), 1);
}

編集:丸め誤差を減らすために、このようなことをしたいかもしれません:

var scale_width = image_width;
var scale_height = image_height;
if (image_width > canvas_width || image_height > canvas_height) {
    var image_ratio = image_height / image_width;
    if (image_ratio * canvas_width > canvas_height) {
        scale_width = canvas_height / image_ratio;
        scale_height = canvas_height;
    } else {
        scale_width = canvas_width;
        scale_height = image_ratio * canvas_width;
    }
}
于 2012-04-29T20:17:18.023 に答える