我已经将此作为OpenImaj的github问题板上的潜在错误提交,但是想要在SO上联系并看看之前是否遇到过这个错误(它不是一个不起眼的类/方法,如果我是第一个遇到这个问题,我会感到惊讶)。我意识到这不是一个问题而是更多的问题,但是这可以保证其他人对这种方法的经验给予评论。
https://github.com/openimaj/openimaj/issues/86
在尝试调整各种不受控制的大小的照片时,我遇到了除零异常。堆栈跟踪的相关部分如下:
线程中的异常" main" java.lang.ArithmeticException:/ by zero
at or.On.:::::::::::::::
进一步检查时,似乎只在图像高度大于宽度时才会出现。在这种情况下,whRatio float最终为0,因为它在第441行执行整数除法。然后导致第442行的newWidth为0,然后在第443行引起异常。
我对这个算法一般都不了解,所以我不知道这个改变是否产生正确的值(我倾向于认为不是因为通过这种方法对图像所做的改变)导致宽高比丢失),但是如果在将结果设置为whRatio之前将宽度/高度除法转换为浮点数,则它不再生成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);