Я хочу отобразить изображение, используя 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, и это файл, который мне нужно преобразовать обратно в Image, но с использованием C ++.
Я вижу, что размер файла image.jpg больше, чем размер файла image.out, поэтому Java должна выполнить сжатие или кодировку, которых я не знаю. Поэтому я не могу просто прочитать изображение в формате JPG и поместить его в объект QImage или QPixmap.
Кто-нибудь знает, как класс ImageIO кодирует изображение?
Кто-нибудь знает, как класс ImageIO кодирует изображение?
Лучший выбор, вероятно, прочитать Руководство по API ввода / вывода изображения Java от Oracle.
Он описывает основы и механизм плагинов, используемый для написания. Вы хотите прочитать хотя бы раздел 3 (и особенно 3.4 о ImageWriter
) и, возможно, 4.1 для ознакомления с концепцией плагина.
Подробнее об управлении настройками записи в формате JPEG см. В разделе JPEGImageWriteParam API док.
PS: Ваш код выглядит нормально, хотя и должен обеспечить допустимый JPEG, при условии, что плагин читателя ImageIO может прочитать ваш исходный файл ( com.sun.imageio.plugins.JPEGImageReader
очень ограничен в отношении нестандартных файлов, даже если большинство других программ с удовольствием их читает).
PPS: стандартный плагин ImageIO JPEG Writer (com.sun.imageio.plugins.JPEGImageWriter
) использует Независимая группа JPEG (IJG) Библиотека JPEG, чтобы написать свой поток JPEG. Я не думаю, что вы можете получить гораздо более «стандартный», чем это.
Других решений пока нет …