2012-12-02 2 views
1

많은 이미지를 표시하는 응용 프로그램이 있으며 이미지는 장치의 전체 화면 크기까지 다양한 크기 일 수 있습니다. 이미지는 모두 다운로드되며 이미지의 색상을 줄이면 이미지 크기가 줄어들고 크기는 같아서 다운로드 시간이 단축됩니다. 축소 된 색상 공간은 내 응용 프로그램에 적합합니다.android 비트 맵 크기 줄이기 같은 메모리 절약

문제는 안드로이드의 비트 맵에 이미지를로드 할 때 ARGB_8888의 androids 비트 맵 구성으로 인해 파일 크기가 훨씬 더 크기 때문에 ALPHA 채널이 필요합니다. ARGB_4444는 더 이상 사용되지 않으며 성능 문제가 있으므로 사용하지 않을 것입니다. 원래 크기와 동일한 크기를 유지하면서로드 된 비트 맵의 ​​메모리 풋 프린트를 줄이는 다른 방법이 있다면 궁금합니다. 다른 검색의 여기 토론과 많은 후

---- 업데이트 ---

/정직 방법이 작업을 수행 있다는 것을 표시되지 않습니다 그것을 읽고. 각 픽셀을 픽셀 당 4 바이트가 아닌 2 바이트로 저장하는 ARGB_4444를 사용할 수 있습니다. 문제는 ARGB_4444가 더 이상 사용되지 않으며 명백한 이유 때문에 API의 지원되지 않는 부분을 사용하지 않으려 고합니다. 안드로이드는 기본값 인 ARGB_8888을 사용하도록 권장합니다. 왜냐하면 알파를 사용해야하기 때문에 이것을 사용해야합니다. 복잡한 색상 공간을 필요로하지 않는 많은 응용 프로그램이 있기 때문에 ARGB_4444 또는 이와 유사한 것이 지원되는 API의 일부가된다는 것을 알면 좋을 것입니다.

답변

3

당신은 알파 (투명도)이 필요하지 않으면 사용할 수 있습니다

절반으로 크기를 줄이고, 2 픽셀 당 바이트 대신 4를 사용
Bitmap.Config.RGB_565 

. 또한 BitmapFactory.Options 봐야한다

는 :

inSampleSize 
inScaled 

올바르게 요구 사항에 대한 설정이 값, 비트 맵 메모리 요구 사항에 대한 매우 긍정적 인 영향을 미칠 수 있습니다.

감사합니다.

+0

나는 알파 (편집 질문) 당신이 언급 한 옵션에 대한 이해한다는 것입니다 필요합니까 이미지의 크기가 변경됩니다. 실제로 다른 장치 화면과 일치하도록 일부 배율을 조정하지만 내 질문에 차원을 유지하면서 메모리 풋 프린트를 줄이는 방법이 있습니다. – esse

+0

트레이드 오프입니다. 'inScale'은 디바이스와 일치하는'Bitmap' 밀도를 조정합니다. 이것은 한 번만 수행되며 큰 화면/밀도에 대해 더 큰 비트 맵을 생성 할 수 있습니다. 화면 밀도가 낮은 이미지가있는 경우 원래 밀도로 비트 맵을 디코딩 한 다음 그리기 시간에 배율을 요청할 수 있습니다. Image가 일정한 다시 그리기를 필요로한다면, 이것은 더 느려질 것이고, 따라서 트레이드 오프가 될 것이다. – Luis

+0

예, 나는 내가 원하는 것을 할 수있는 좋은 방법이 없다고 생각합니다. 이미 장치 화면 해상도/밀도와 일치하도록 비율을 조정합니다. 그러나 ARGB_8888이 필요하지 않으므로 작은 색상 공간 때문에 비트 맵에 ARGB_8888 크기를 사용하지 않아도됩니다. 이것은 제가 가지고있는 어플리케이션에서 더 중요한 많은 이미지를 메모리에로드 할 수있게합니다. – esse

0

것은 내가 here 기본적으로

을 기록 비슷한 대답을 읽고, 비트 맵 재활용은 메모리 사용량을 줄이기 위해 사전 벌집 장치에 필요한