Вопрос

У меня есть приложение C ++, которое связывается с камерой и получает необработанные изображения. Затем у меня есть байт [] в C ++, который я хочу отправить на Java с JNI.

Тем не менее, мне нужно преобразовать необработанный байт [] в реальном формате файла (.bmp был моим первым выбором). Я могу легко сделать это, если я напишу его из C ++ в файл в жестком диске, используя Bitmapfileinfo и Bitmapheaderinfo, но я не знаю, как можно было бы отправить весь формат на Java.

Затем я подумал о том, чтобы отправить только данные необработанных байтовых [] с использованием JNI, а затем преобразование их в .bmp, но я не могу найти хорошую библиотеку для этого в Java.

Что будет моим лучшим выбором? Преобразование изображения в C ++, а затем отправить его с помощью JNI или отправить необработанные данные в Java, а затем преобразовать его в .bmp? Как бы мне проще всего добиться этого?

Это было полезно?

Решение

Это всего лишь две строки в Java 1.5:

BufferedImage image = ImageIO.read( new ByteArrayInputStream( byteArray ) );
ImageIO.write(image, "BMP", new File("filename.bmp"));

Java (в Windows) знает, как экспортировать JPG, PNG и BMP, насколько я знаю.

Другие советы

Там нет необходимости делать что -то из этого. Превратить байт массив в входной поток и подайте его на imageio.read ();

public Image getImageFromByteArray(byte[] byteArray){
    InputStream is = new ByteArrayInputStream(byteArray);
    return ImageIO.read(is);
} 

Это создает объект изображения из вашего байтового массива, который тогда действительно очень тривиально отображать внутри компонента графического интерфейса. Если вы хотите сохранить его, вы также можете использовать класс Imageio для этого.

public void saveImage(Image img, String fileFormat, File f){
    ImageIO.write(img, fileFormat, f);
}

Если вы знаете, как писать как .bmp В файл, тогда вы можете использовать (почти) тот же код для записи в буфер памяти. Этот буфер памяти вы можете отправить на Java, и он декодирует формат, как упомянуто формат Stroboskop или Markus Koivisto. Если вы отредактировали свой вопрос, чтобы включить, как вы записываете данные в .bmp Файл, я мог бы предложить, как преобразовать это в операцию в памяти.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top