-1

別の質問の再投稿のようですね:

HD 1920*1080 などの入力画像があり、倍率が 0.3 (元のサイズの 30%) であることを知っているだけです。アスペクト比を維持しながら、元の 30% に近い新しいターゲット サイズを計算するにはどうすればよいでしょうか? つまり、画像を正確に 30% に再スケーリングする方法は?

これが意味をなさない場合は、ターゲットサイズを知らずに倍率を知らずに画像を拡大縮小する方法について教えてください。

ありがとう

Ps: C/C++ を使用していますが、疑似コードは問題ありません

4

1 に答える 1

3

高さと幅が整数の場合は、これを行うことができます...

height = height * (int)(scaleFactor*100) / 100;
width  = width  * (int)(scaleFactor*100) / 100;

あるいは、このソリューションも機能しintますが、浮動小数点変数の方が理にかなっています...

height = floor(height * scaleFactor);
width  = floor(width  * scaleFactor);

または、変数の種類に関係なく、コンパイラに丸めの処理方法を心配させることができます...

height = height * scaleFactor;
width  = width  * scaleFactor;

...しかし、そのソリューションでは、あるプラットフォームから次のプラットフォームへの丸め誤差が1つずつ発生する可能性があります。ただし、これはユースケースでは問題にならない場合があります。

別の可能性は、あなたscaleFactor自身がでありint、(この例では)30%でscaleFactorある場合、値30である可能性があり、これを行うだけです...

height = height * scaleFactor / 100;
width  = width  * scaleFactor / 100;

重要なのは、x座標とy座標の両方を同じ係数でスケーリングすると、元のアスペクト比が維持されることです。

于 2013-01-24T19:41:16.113 に答える