2011-10-31 2 views
0

인터넷에서 이미지를 다운로드하고 화면에 표시되도록 조정합니다. 아이디어는 inSampleSize를 사용하여 압축 해제하는 동안 큰 이미지를 확장하고 OutOfMemory 예외를 방지 할 수 있도록하는 것입니다. 그러나 inSampleSize를 찾으려면 이미지 해상도를 알아야합니다. inJustDecodeBounds 옵션을 사용하여 얻을 수 있습니다.Android BitmapFactory over

문제는이 두 번 다운로드되기 때문에 내가 직접 인터넷에서 이미지를 그것을 스트림을 전달하고 다운로드 할 수 있다는 것입니다 (먼저 스케일 비트 맵을 얻기 위해 다음의 크기를 얻을 수 있습니다). 이미지 크기가 클 수 있기 때문에 이미지를 다운로드하여 RAM에 저장할 수 없습니다. 남은 유일한 해결책은 이미지를 SD 카드/내부 메모리에 다운로드하고 거기에서 읽는 것입니다. 그러나 사용자가 공간을 남겨 두지 않으면 나쁜 일이 발생하게됩니다.

질문은 - 이미지를 두 번 다운로드하지 않아도되는 저장 공간과 RAM 메모리에 의존하지 않고이를 수행 할 수있는 방법이 있습니까? 또는 BitmapFactory가 inJustDecodeBounds를 사용할 때 전체 이미지를 다운로드하지 않고 머리글 만 다운로드 할 수 있습니까?

감사

+0

ram 및 sd? 대신 사용할 수 있습니까? 흠 ... 조크는 제쳐두고 꽤 표준 다운로드 메커니즘 인 bitmapfactory와 dunno를 생각하지만 비슷한 동작을 기대합니다. 전체적으로 나는 왜 이것이 이제까지 문제가 될지 모르겠다. 수표를 넣을 공간이 없는지, 그렇지 않으면 다운로드를 허용 할 수 없는지 그냥 확인할 수는 없습니까? – Warpzit

+0

더 나은 방법이 있는지 항상 확인하는 것이 좋습니다. 만약 전체 파일을 다운로드하지 않고 이미지 크기를 얻을 수 있다면 그러한 메커니즘은 훨씬 더 신뢰할 수 있습니다. –

+0

Aggree :)하지만 여전히 메모리 문제가있을 것입니다 ... 사진을 두 번 찍으면 문제가되는 이유는 무엇입니까? 두 번 사진을 갖는 것은이 두 배 다운로드, 문제가되지 않습니다 – Warpzit

답변

1

당신은 당신이 전체 파일을 다운로드하지 않도록 의미한다 너비와 높이를 결정하기 위해 파일 헤더를 읽을 수 있어야 할 PNG, GIF 또는 JPG를 다운로드하는 경우.

This post에는 Android에서 사용할 수 있도록 Java로 포팅 할 수있는 위 형식의 헤더에서 너비와 높이를 읽을 수있는 C# 코드가 있습니다.