Так что в настоящее время я использую код C++
для выгрузки скриншотов на диск. Я читаю их, используя Java
, чтобы обрезать их, а затем записываю их обратно на диск, чтобы C++
мог загружать их обратно и применять алгоритмы изображения (OpenCV
).
После записи измененного изображения обратно из Java
я, однако, получаю следующую ошибку в C++
:
libpng error: PNG unsigned integer out of range
Мой код обрезки в Java
равен следующим образом :
private void cropImage(Path imageFilePath) throws IOException
{
File imageFile = imageFilePath.toFile();
BufferedImage bufferedImage = ImageIO.read(imageFile);
BufferedImage subImage = bufferedImage.getSubimage(x, y, width, height);
BufferedImage copiedImage = new BufferedImage(subImage.getWidth(), subImage.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics graphics = copiedImage.createGraphics();
graphics.drawImage(subImage, 0, 0, null);
ImageIO.write(copiedImage, getExtension(imageFile.getName()), imageFile);
}
Удивительно, но если я смотрю обрезанный PNG
, он выглядит нормально в приложении Windows Photo
, но не будет работать в libpng
. Без шага обрезки нет проблемы libpng
. Что-то не так с моим PNG
кодом обрезки?