2010-01-26 7 views
10

이미지의 바이트 배열 표현이 있습니다. 이미지 파일로 디스크에 저장하는 방법.바이트 배열을 디스크에 이미지 파일로 저장하는 방법은 무엇입니까?

이미이

OutputStream out = new FileOutputStream("a.jpg"); 
out.write(byteArray); 
out.flush(); 
out.close(); 

했을하지만 그것을 더블 클릭하여 이미지를 열 때, 그것은 모든 이미지를 표시하지 않습니다. (적어도 당신이 표시 한 코드에서) 시도/마침내 블록을 사용하지 못하는 것보다

FileOutputStream fos = new FileOutputStream("image.jpg"); 
try { 
    fos.write(someByteArray); 
} 
finally { 
    fos.close(); 
} 
+0

PNG 또는 JPG로 작성 하시겠습니까? 아니면 어느 시점에서 다시 읽을 수 있도록 작성 하시겠습니까? –

+0

image.setRGB에 전달할 수있는 종류의 배열이 있습니까? –

+1

바이트 []를 어디에서 가져 왔습니까? 어떤 형식 (JPEG, GIF, PNG, BMP ...)인지 알아야합니다. – Thilo

답변

7

다른 괜찮을 것 :

+5

+1 "사용자가있는 경우 출력 스트림을 플러시 할 필요가 없습니다." –

+0

http : // stackoverflow를 참조하십시오. com/questions/2132657/java-swing-architecture-problem/2132670 # 2132670 ................. 실제로 모든 사람이 내가 스윙의 MVC 아키텍처를 사용하도록 제안했지만 .... 그 대답을 원하지 않아 .... 나는 이미 알고있다 ... 나는 그 자신의 문제를 알아낼 수 있도록 여러 파일로 나뉘어 진 gui 코드가있는 제안이나 예제를 원한다. . 나는 구글에서 많이 검색했지만 그런 예를 얻을 수 없었다 ... –

7

당신은 FileOutputStream 클래스를 사용할 수 있습니다. (당신이 방법으로 그것을 폐쇄하는 경우 당신은 출력 스트림을 플러시 할 필요가 없습니다.)

그것을 작동하지 않는 것처럼, 그것은하지 않습니다 실제로byteArray은 JPEG 인코딩 된 이미지를 포함 제안합니다. 먼저 byteArray을 어떻게 만들었습니까? '원시'표현 인 경우이를 인코딩하는 것이 좋습니다. javax.imageio 패키지를 사용하십시오.

3

ImageIO API을 사용할 수 있습니다.

세부 사항은 약간 털이 있지만 우선 TYPE_BYTE_INDEXED 유형과 적절한 IndexColorModel 인스턴스를 사용하여 BufferedImage를 만들고 싶을 것입니다. 그런 다음 바이트 배열을 입력하십시오. 힌트 : 당신과의 BufferedImage의 내부 표현 얻을 수 있습니다 가능성이 형 DataBufferByte의 데이터 버퍼를 반환합니다

myDataBuffer = myBufferedImage.getRaster().getDataBuffer(); 

를 (확인!)있는 당신이 그런

myByteArray = ((DataBufferByte) myDataBuffer).getData(); 

와 바이트 배열을 얻을 System.arraycopy를 사용하여 바이트 배열을 복사 할 수 있습니다.

관련 문제