효율적인 Bitmap 로드
비트맵을 어떻게 불러옵니까?
BitmapFactory 클래스는 네 가지 static 방법을 제공합니다: decodeFile, decodeResource, decodeStream, decodeByteArray.
Bitmap icon = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.frequent_default);
비트맵을 효율적으로 탑재하는 핵심 사상
바로 비트맵팩토리를 통해서.옵션 클래스의 대상은 합리적인 inSample Size 속성 값을 설정한 다음에 옵션 대상을 방금 언급한bitmap을 불러오는 네 가지 static 방법에 전달합니다. 모두 BitmapFactory를 지원합니다.Options라는 매개변수.
public static Bitmap decodeResource(Resources res, int id, Options opts)
Sample Size: 샘플링 확률은 10241024 픽셀의 사진으로 ARGB8888 형식으로 저장되며 메모리 크기는 102410241244, 즉 4MB를 차지한다고 가정합니다.만약 inSampleSize가 2라면 샘플을 채취한 후의 그림의 폭은 원래의 1/2, 즉 51252 픽셀로 메모리 크기를 차지하는 512514, 즉 1MB이다.참고:
4
4
합리적인 inSampleSize 값 설정
다음의 실제 상황을 고려하여 ImageView의 크기가 100100픽셀이고 그림의 원시 사이즈가 200200이라고 가정하면 inSampleSize를 2로 설정하면 된다. 만약에 그림의 원시 사이즈가 200300이면 inSampleSize를 2로 설정하고 축소된 그림의 사이즈가 100150이면 이 ImageView에 설정하는 것도 문제없다. 그러나 inSampleSize를 4로 설정하면 축소된 사이즈는 50*75로 설정한다.ImageView가 기대하는 크기에 도달하지 못하면 이 그림이 늘어나 모호해진다. 이것은 분명히 우리가 기대하는 것이 아니다.합리적인 샘플링 확률을 얻는 것도 간단하다. 다음과 같은 절차를 통해 얻을 수 있다.
4
4
4
4
여기에 inJust Decode Bounds 매개 변수의 의미를 설명한다. 이 매개 변수가true일 때Bitmap Factory는 그림의 원시적이고 넓은 정보만 해석할 뿐 그림을 실제로 불러오지 않기 때문에 이 조작은 경량급이다.위 절차에 대해 코드로 구현:
public static Bitmap decodeResourceEx(Resources res, int resId, int reqWidth, reqHeight) {
//first, decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(res, id, options);
int originWidth = options.outWidth;
int originHeight = options.outHeight;
//calculate inSampleSize
options.inSampleSize = calculateInSampleSize(originWidth, originHeight, reqWidth, reqHeight);
//Decode bitmap with inSampleSize
options.inJustDecodeBounds = false;
return BitmapFacotry.decodeResource(res, resId, options);
}
private int calculateInSampleSize(originWidth, originHeight, reqWidth, reqHeight) {
int inSampleSize = 1;
if(originWidth>reqWidth || originHeight>reqHeight) {
final int halfWidth = originWidth / 2;
final int halfHeight = originHeight / 2;
//calculate the largest inSampleSize value that is a power of 2 and keeps both height and width larger than the requested height and width.
while(((halfWidth/inSampleSize) >= reqWidth) &&((halfHeight/inSampleSize) >= reqHeight)) {
inSampleSize *= 2;
}
}
return inSampleSize;
}
예를 들어 ImageView가 원하는 이미지 크기가 100*100 픽셀인 경우 다음과 같은 방법으로 이미지를 효율적으로 로드하고 표시할 수 있습니다.
mImageView.setImageBitmap(decodeResourceEx(getResources(), R.id.myImage, 100, 100));
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.