私はこれを OpenImaj の github issues board で潜在的なバグとして提出しましたが、SO に連絡して、これが以前に遭遇したかどうかを確認したかった (これはあいまいなクラス/メソッドではなく、私が最初に来たら驚くだろう)この問題全体で)。これは問題ではなく、提起された問題であると認識していますが、これは、この方法を使用した他の人からのコメントを保証するものです.
https://github.com/openimaj/openimaj/issues/86
さまざまな制御されていないサイズの写真のサイズを変更しようとしているときに、0 による除算の例外が発生しました。スタック トレースの関連部分は次のとおりです。
スレッド「メイン」の例外 java.lang.ArithmeticException: /
org.openimaj.image.processing.resize.ResizeProcessor.resizeMaxArea でゼロによる (ResizeProcessor.java:443)
さらに調べてみると、画像の高さが幅よりも大きい場合にのみ発生するようです。このような状況では、441 行目で整数除算を実行するため、whRatio float は 0 になります。これにより、442 行目の newWidth が 0 になり、443 行目の例外が発生します。
私は一般的にアルゴリズムについて何も知らないので、この変更が正しい値を生成するかどうかはわかりません(この方法で画像に変更を加えた結果、アスペクト比が失われたためではないと思う傾向があります)。結果を WhRatio に設定する前に、幅/高さの除算を float にキャストすると、0 値が生成されなくなります (以下のコードを参照)。
final int width = 2687;
final int height = 3356;
final int area = width * height;
final int maxArea = 3700000;
final float whRatio = (float) width / height;
System.out.println("whRatio: " + whRatio);
final double newWidth = Math.sqrt(maxArea * whRatio);
System.out.println("New width: " + newWidth);