Я хочу отобразить изображение с помощью C++, точнее используя Qt Framework. Изображение было закодировано с использованием метода ImageIO.write таким образом:
BufferedImage originalImage = ImageIO.read(new File("c:\\image.jpg"));
// convert BufferedImage to byte array
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(originalImage, "jpg", baos);
baos.flush();
imageInByte = baos.toByteArray();
baos.close();
Затем содержимое ByteArrayOutputStream просто выгружается в файл image.out, и это файл, который мне нужно преобразовать обратно в изображение, но используя C++. Я вижу, что размер файла image.jpg больше размера файла image.out, поэтому Java должен сделать некоторое сжатие или кодировку, которые я не знаю. Поэтому я не могу просто прочитать изображение как JPG и поместить его в объект QImage или QPixmap.
Кто-нибудь знает, как класс ImageIO кодирует изображение?
Кто-нибудь знает, как класс ImageIO кодирует изображение?
Лучший выбор - это, вероятно, прочитать Руководство по API ввода-вывода Java Image от Oracle.
В нем описываются основы и механизм плагина, используемые для записи. Вы хотите прочитать хотя бы раздел 3 (и особенно 3.4 о ImageWriter
) и, возможно, 4.1 для ознакомления с концепцией плагина.
Подробнее о том, как управлять настройками записи в формате JPEG, см. В документе JPImageWriteParam API.
PS: Ваш код выглядит нормально, и должен предоставить допустимый JPEG, если плагин ReaderIO Reader может прочитать ваш исходный файл (com.sun.imageio.plugins.JPEGImageReader
очень ограничительный в отношении нестандартных файлов, даже если большинство другое программное обеспечение счастливо читает их).
PPS: стандартный плагин для создания изображений ImageIO JPEG (com.sun.imageio.plugins.JPEGImageWriter
) использует библиотеку Independent JPEG Group (IJG) JPEG для записи своего потока JPEG. Я не думаю, что вы можете получить гораздо больше "стандартных", чем это.