문제

카메라와 통신하고 원시 이미지 데이터를 가져 오는 C ++ 응용 프로그램이 있습니다. 그런 다음 C ++에 바이트 []가 있는데, 이는 JNI와 함께 Java로 보내고 싶습니다.

그러나 원시 바이트 []를 실제 파일 형식으로 변환해야합니다 (.BMP는 나의 첫 번째 선택). bitmapfileinfo 및 bitmapheaderinfo를 사용하여 C ++에서 하드 드라이브의 파일로 작성하면 쉽게이 작업을 수행 할 수 있지만 전체 형식을 Java로 전송하는 방법을 모르겠습니다.

그런 다음 JNI를 사용하여 RAW 바이트 [] 데이터 만 보내고이를 .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);
} 

이것은 바이트 배열에서 이미지 객체를 만듭니다. 그런 다음 실제로 GUI 구성 요소 내부에 표시하기가 매우 사소합니다. 저장하려면 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