큰 이미지를지도로 사용해야하는 프로젝트 작업 중입니다. 이미지는 약 95MB이고 해상도는 12100 x 8000 픽셀입니다.Android : 큰 이미지의 세부 정보 만로드
나는 전체 이미지를 한 번에 필요로하지 않고, 단지 1000 x 1000 픽셀의 디테일이 필요하다. (항상 똑같은 부분이 아니라, 똑같은 부분을 잡아 내면 사용할 수있는 해결책이 아니다.) 그래서 그냥 BitmapOptions
으로 샘플링 할 수는 없습니다.
나는 주위를 돌아보고 FileInputStream
(이미지는 SD 카드에 있음)을 만들고 나서 decodeStream(InputStream is, Rect outPadding, BitmapFactory.Options opts)
이라는 세부 정보를로드 할 수 있다는 것을 알았습니다. 그렇게하면 모든 것을 메모리에로드하지 않습니다. 해봤지만 이미지를로드하려고하면 충돌이 발생합니다. 내가 이미지를로드 할 때,
FileInputStream stream = null;
try {
stream = new FileInputStream(path);
} catch(Exception e) {
Log.e("inputstream",e.toString());
}
Rect rect = new Rect(a,b,c,d);
return BitmapFactory.decodeStream(stream, rect, null);
활동은 닫히고 로그 캣은 나에게 java.lang.outOfMemoryError
를 알려줍니다 : 여기에 내 코드입니다. 왜 추락합니까? 스트림에서 "on-the-fly"이미지에서 작동해야한다고 생각했지만 오류에 대한 유일한 설명은 구멍 이미지를 메모리에로드하려고 시도한 것입니다. 아무도 이미지의 세부 사항을 어떻게로드 할 수 있는지, 또는 왜이 아이디어가 작동하지 않는지에 대한 아이디어가 있습니까?
고마워요, 이것이 내가 찾고 있었던 것입니다. 오페어 레퍼런스에서도 큰 이미지에 대한 사이트가 있지만, 단지 InSampleSize를 사용하는 방법을 설명하는 것 뿐이며 'BitmapRegionDecoder'에 대한 단어가 아닙니다. 그러나, 내가 그것을 사용했을 때, 그것은 여전히 추락했다. 나는 Decoder에 BitmapFactory.Options를 주었을 때 실수로 'DetectRegion'대신 '(rect, null)'(허용됨!)을 호출하는 대신 SampleSize 1을 사용하여 문제를 해결했습니다. 왜 그런지 알지만 그 일은 :-). 나는 타일과 RegionDecoder의 조합을 사용할 것이라고 생각한다. –