2011-12-21 2 views
1

이 질문은 내 previous question과 관련이 있습니다. 그러나이 내용을 이해하기 위해서는이 내용을 읽을 필요가 없습니다.비트 맵을 덩어리로 파일에 작성하십시오.

이제 비트 맵을 더 작은 부분으로 변환 한 다음 그 작은 부분을 저장하려고했습니다.

문제가 발생합니다 : 첫 번째 부분 만 전체 이미지보다 크기가 큰 파일에 저장됩니다. 아래는 내가 사용하고 코드입니다 :

for (int i = 0; i < Image.getHeight(); i++) 
{ 
    fout = new FileOutputStream(file, true); 
    Bitmap temp = Bitmap.createBitmap(Image, 0, i,Image.getWidth(), 1); 
    temp.compress(Bitmap.CompressFormat.PNG, 100, fout); 
    fout.flush(); 
    fout.close(); 
} 

코드는 아주 간단하지만 난 이해 해달라고 만 첫 번째 행이 파일에 기록됩니다 이유.

업데이트 : 멀린과 디팍이 옳다. 나는 지금 다른 이름을 주려고 노력했고 모든 부분이 다른 파일에 성공적으로 쓰여졌다. 이제 문제를 안다면, 두 번째 청크에서 헤더를 제거하고 첫 번째 청크에서 eof를 제거해야합니까?

+0

파일에 첫 번째 행만 있는지 어떻게 확인 했습니까? – Deepak

답변

3

나는 지구상에서 당신이 이것을 매우 비효율적으로하는 이유를 묻는 충동에 저항 할 것입니다. 그래서 한번 살펴 봅시다.

그래서 한 번에 한 줄의 픽셀을 작성하지만 append 플래그를 true로 설정하여 반복적으로 같은 파일에 쓰고 있습니다.

당신이 놓친 것은 당신이 쓰고있는 비트 맵을 쓰는 것이 자급 자족한다는 사실입니다. 따라서 첫 번째 라인을 읽는 프로그램은 전체 비트 맵을 기대합니다.

이것은 텍스트 파일에 EOF 마커가있는 것과 같습니다. 모든 라인이 작성하지만 그것을 읽을 때 독자가 첫번째 EOF 후 제공되는

당신은 이해하기 the structure of a PNG file을 연구 할 필요가 더 완벽하게 압축 된 파일을 추가하고 있기 때문에

+0

고맙습니다, 당신의 대답은 꽤 좋아 보이지만 첫 번째 질문에 대해서는 제가 이전 질문에 대한 질문에서 링크를 줬습니다. 것은, 내가 필터링을 적용 할 일부 이미지를 int 배열에있는 내가 오코 내 줄 줄 것이다 이미지를 변환 할 필요가 그래서 내가 행을 이미지를 분할 필터를 적용하고 파일을 저장 (변수를 재사용 /사물). 그리고 일부 논리와 파일에서 읽어 ImageView에 추가 ... 나에게 잘 보이는 atleast .. :) – Farhan

+0

@ 패럴 난 정말 표준 아파치를 사용 하여이 하나를 그림 수 없습니다. bitmapfactory를 사용하여 비트 맵의 ​​작은 부분을 쉽게 읽을 수는 있지만 비트 맵 세그먼트를 작성할 수는 없습니다. 찾고있는 것을 수행하는 전문 라이브러리를 찾아야 할 수도 있습니다 (예 : libPNG – Merlin

+0

). sdk에서 libPNG 대신 사용할 수있는 대안이 없다는 것을 의미하며 내 논리를 변경해야합니까? 나는 ImageBytes로 작업하기를 생각하고있었습니다. – Farhan

1

을 무슨 일이 일어나고 있는지 (.png를) 하나씩 차례로 결과 파일을 열면 첫 번째 행인 첫 번째 비트 인코딩 된 데이터 만 표시됩니다. 이것은 인코딩 된 이미지 헤더가 인코딩 된 컨텐츠를 구성하는 바이트 수를 가지며, 디코더가 엔드 마커 이후 파일의 나머지 데이터에 대해 신경을 쓰지 않기 때문에 논리적이다.

다른 파일의 끝에 .png 파일을 복사하려고했는데 파일을 열 때 변경되지 않은 첫 번째 이미지를 보았습니다!

+0

+1. 당신 말이 맞습니다.하지만 지금 내가 어떻게해야합니까? – Farhan

+1

@farhan Merlin에 동의합니다. 특수 라이브러리가 필요할 수도있는 부분 인코더입니다. – Deepak

0

각 행을 파일에 png로 추가 할 수 없으므로 논리가 잘못되었습니다. 아마 헤더 파일이 있기 때문에 추가 할 때마다 추가됩니다.

+0

필자는 새로운 FileOutputStream 두 번째 인수에 – njzk2

+1

을 추가합니다. 죄송합니다. 방금 보았습니다. – Caner