AN Gridview 그림 미리 보기 그림을 로드하여 OOM 문제 해결
OOM이 생기는 이유: 그림을 모두 메모리에 불러와서 축소하기
OOM의 키 코드가 나타납니다. BitmapFactory.decodeFile(file.getAbsolutePath());
해결의 관건은 그림의 넓고 높은 관건적인 속성을 가져와 원시 그림이 아닌 메모리에 불러온 다음에 축소하는 것이다
OOM 해결을 위한 주요 코드: BitmapFactory.decodeFile(filePath, options) ;
먼저 예를 보겠습니다.
public static int calculateRatioSize(BitmapFactory.Options options,
int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
final int heightRatio = Math.round((float) height / (float) reqHeight);
final int widthRatio = Math.round((float) width / (float) reqWidth);
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}
return inSampleSize;
}
public static Bitmap decodeSampledBitmapFromFilePath(String filePath,
int reqWidth, int reqHeight) {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;// A
BitmapFactory.decodeFile(filePath, options) ;
options.inSampleSize = calculateRatioSize(options, reqWidth, reqHeight);
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(filePath, options) ;// B
}
BitmapFactory.Options options의 inJustDecodeBounds를 true로 설정
원본 그림을 불러오지 않고 메모리에 들어갈 수 있습니다. 설정한 후에 A가 되돌아오는 Bitmap은 null입니다.
그리고 주어진 크기의 넓이에 따라 크기 조정 비율 inSampleSize를 계산합니다.
마지막으로 options.inJustDecodeBounds=false를 끄고bitmap 대상을 다시 읽습니다. 이것은 B가 원하는 그림의 미리 보기 그림입니다.
마지막으로 참조된 두 블로그:
클릭하여 링크 열기 1
클릭하여 링크 열기 2
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.