Иногда мои изображения являются слишком большими, и я получаю эту ошибку:Изменить размер на самом большие возможные изображения при mantaining соотношения
Exception in thread "main" java.lang.NegativeArraySizeException at java.awt.image.DataBufferByte.(Unknown Source) at java.awt.image.Raster.createInterleavedRaster(Unknown Source) at java.awt.image.BufferedImage.(Unknown Source)
Всякий раз, когда я получаю это я хочу, чтобы настроить мое изображение до максимально возможного размера, сохраняя при этом соотношении ,
я в конечном итоге со следующими формулами:
if (targetWidth * targetHeight >= Integer.MAX_VALUE || targetWidth * targetHeight < 0) {
System.out.println("Target image too big... Size will be adjusted!");
if (targetWidth > targetHeight) {
targetWidth = (int)Math.sqrt((Integer.MAX_VALUE) * (float)(targetWidth/targetHeight));
targetHeight = (Integer.MAX_VALUE)/targetWidth;
} else {
targetHeight = (int)Math.sqrt((Integer.MAX_VALUE) * (float)(targetHeight/targetWidth));
targetWidth = (Integer.MAX_VALUE)/targetHeight;
}
}
я все еще получаю ту же проблему, и мои условия. Я предполагаю, что
WIDTH * HEIGHT < Integer.MAX_VALUE
ли явно не условие Ищу Любая помощь?
Edit: После некоторого обсуждения я думаю, что реальный вопрос к этой проблеме: Какой самый большой возможный размер, который я могу передать в конструктор BufferedImage для того, чтобы не получить NegativeArraySizeException на:
at java.awt.image.DataBufferByte.(Unknown Source)
Проверьте это для размера массива: http://stackoverflow.com/questions/31382531/why-i-cant-create-an-array-with-large-size –
Я не получаю ни одной из этих ошибок –
Ширина и высота целых чисел? Если ширина * высота действительно больше Integer.MAX_VALUE, это означает, что вы не можете удерживать продукт в int. Попытка будет усекать его, поэтому результат в Java всегда будет <= Integer.MAX_VALUE независимо от истинного значения. Один из способов - преобразовать ширину и высоту в тип данных, который всегда может удерживать продукт, например, длинный, до умножения. После этого сравнение с Integer.MAX_VALUE должно работать хорошо. –