Обрезать буферизованное изображение без потери dpi в java
Я обрезаю изображение с помощью буферизованного изображения Java. Проблема в том, что обрезанное изображение теряет качество с точки зрения DPI. Скажем, например, если DPI родительского изображения имеет значение 200, то DPI обрезанного изображения уменьшается до 96. Из-за этого я теряю точность распознавания.
Ниже приведен фрагмент кода, который я использую для получения обрезанного буферизованного изображения.
BufferedImage cropImage( BufferedImage image, final int[] topLeft, int width, int height )
{
int x = Math.max( topLeft[CoOrdinate.X.getValue()], image.getMinX() );
int y = Math.max( topLeft[CoOrdinate.Y.getValue()], image.getMinY() );
int imageWidth = image.getWidth();
int imageHeight = image.getHeight();
width = ( x + width ) > imageWidth ? imageWidth - x : width;
height = ( y + height ) > imageHeight ? imageHeight - y : height;
return image.getSubimage( x, y, width, height );
}
Затем я сохраняю его, используя ImageIO
File saveImage( String filePath, BufferedImage image )
{
String formatName = FilenameUtils.getExtension( filePath );
File croppedFile = new File( filePath );
try {
ImageIO.write( image, formatName,croppedFile );
return croppedFile;
} catch ( IOException e ) {
LOG.error( "IO Exception occured while saving a buffered image" );
throw new FileHandlingException( "IO Exception occured while saving a buffered image", e );
}
}
Как я могу обрезать изображение без потери качества DPI? Я видел много решений для Image Resizing
и я понимаю, что изменение размера потеряет качество. Но обрезка, сохранение DPI должно быть простым, верно?
РЕДАКТИРОВАТЬ:
Обрезка ImageMagick делает именно то, что мне нужно. но мне придется использовать командную строку из Java. Не вариант для меня прямо сейчас.