SD 카드에서 내 앱으로 많은 큰 이미지 (500PNG 파일)를로드해야합니다. 이미지를 비트 맵으로 변환하고 비트 맵 파일을 만들어야합니까? 나는 힙 크기를 조정하고 싶지 않습니다. SD 카드에서 이미지를 읽을 수있는 다른 방법이 있습니까?Android가 외부 저장소의 큰 이미지를로드합니다.
0
A
답변
0
앱의 이미지 내부 표현은 특정 형식 (png, bmp 등)의 이미지가 아닌 비트와 바이트의 모음입니다.
이미지가 BitmapFactory에 의해로드 될 때 이미지가이 내부 표현으로 변환됩니다.
빠르게 메모리가 부족합니다, 일반적으로 한 번에 모든 비트 맵을로드하는 것은 좋은 생각이 아니다 ...
1
당신이보기에서 표시하는 경우에, 당신은에로드해야 기억 전체.
이미지의 크기는 언급하지 않았지만 포토 갤러리에서 수행하는 작업은 가비지 수집기가 아닌 경우 버릴 수 있도록 SoftReference
의 목록을이 비트 맵에 보관하는 것입니다. 보이는 (즉, 그들을 표시하는보기가 버려지는 경우 - 실제로 이것이 발생하는지 확인하십시오. 예 : AdapterView
사용). 이 비트 맵을 게으른 로딩과 결합하면 좋을 것입니다.
0
이미지의 크기가 큰 경우 ImageView에로드하기 전에 크기를 조정해야합니다. 그렇지 않으면 한 장의 사진으로도 쉽게 메모리 부족 문제가 발생할 수 있습니다. 얼마나 많은 이미지를 동시에 표시하고 얼마나 크게 표시할지 모르겠습니다. 그러나 그들을 표시하기 전에 크기를 조정하는 것이 좋습니다.
는이 코드를 사용할 수 있습니다, 그것을 이미지 크기를 조정하고 표시하려면 내 안드로이드 프로젝트에서BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
bitmapOptions.inJustDecodeBounds = true;
BitmapFactory.decodeStream(fileInputStream, null, bitmapOptions);
//reduce the image size
int imageWidth = bitmapOptions.outWidth;
int imageHeight = bitmapOptions.outHeight;
int scale = 1;
while (imageWidth/scale >= screenWidth && imageHeight/scale >= screenHeight) {
imageWidth = imageWidth/2;
imageHeight = imageHeight/2;
scale = scale * 2;
}
//decode the image with necessary size
fileInputStream = new FileInputStream(cacheFile);
bitmapOptions.inSampleSize = scale;
bitmapOptions.inJustDecodeBounds = false;
imageBitmap = BitmapFactory.decodeStream(fileInputStream, null, bitmapOptions);
ImageView imageView = (ImageView)this.findViewById(R.id.preview);
imageView.setImageBitmap(imageBitmap);
, 나는 그것을 검토 할 내 HD 배경 화면의 크기를 조정하기 위해이 코드 조각을 사용하고 있습니다.
관련 문제
- 1. 외부 저장소의 코드
- 2. android가 외부 클래스를 이클립스로 가져옴
- 3. 외부 저장소의 소스를 최신으로 유지하십시오.
- 4. Android가 외부 로컬 javascript 파일을 WebView에로드합니다.
- 5. Android가 외부 SD 카드에 저장 하시겠습니까?
- 6. 포인트 SVN CVS 저장소의 외부 코드
- 7. Android가 코드
- 8. 안드로이드, 외부 저장소의 파일 또는 내부 저장소의 파일 로딩하는 것이 더 빠릅니다.
- 9. Cocos2d-iphone은 "plant VS zombie"와 같은 큰 화면 이동 이미지를로드합니다.
- 10. git 저장소의 히스토리 축소
- 11. 외부 svn 저장소의 로컬 수정 된 복사본을 유지하는 방법
- 12. Android가 잠자기 모드로 전환되면 Android가 스레드를 중지 했습니까?
- 13. 왜 Android가 NullPointerException을 throw합니까?
- 14. Android가 모달 활동 시작
- 15. Android가 창을 유출 했습니까?
- 16. Android가 교착 상태에 있음
- 17. Android가 Twitter에 연결 중
- 18. Android가 앱을로드하지 않음
- 19. CAML을 사용하여 큰 외부 목록 쿼리
- 20. Android가 gridview 클릭 속도를 높입니다.
- 21. Android가 SQLite 데이터베이스를 업데이트하지 않습니다.
- 22. Android가 SingleInstance 활동에 정보를 전달합니다.
- 23. Android가 부적절하게 무선 네트워크를 분실했습니다.
- 24. Android가 현재 GEO 좌표를 얻습니다.
- 25. Android가 비트 맵으로 문자열을 인코딩합니까?
- 26. 동영상 회전 MediaControls, android가 엉망입니다
- 27. Android가 하위 폴더로 레이아웃 정리
- 28. EC2에서 인스턴스 저장소의 요점은 무엇입니까?
- 29. Git 저장소의 소스를 SVN 저장소의 소스와 비교하는 방법
- 30. svn - 저장소의 일부 + 기록을 다른 저장소의 폴더에 복사 하시겠습니까?
답변 해 주셔서 감사합니다. 당신은 절대적으로 옳습니다. 그러나 요구 사항 때문에 모든 이미지를 한번에로드해야합니다. – Maria