내 응용 프로그램은 건물 바닥 평면을로드 한 다음 바닥 평면에 객체 (가구)를 그려야합니다. floorplan 이미지는 2500 x 1500 240Kb PNG이지만 BitmapFactory를 사용하면 비트 맵을 만드는 데 12MB 이상의 힙이 필요하므로 대부분의 장치가 충돌하여 OutOfMemory 오류가 발생합니다. 여기서 분명히하자. 이것은 처음으로 이미지를 생성하는 동안 충돌이 발생하기 때문에, 내가 알 수있는 한 메모리 누수와 bitmap.recycle()은 아무 것도하지 않습니다. inSampleSize로 이미지를 읽는 것은 이미지를 인식 할 수없는 샘플 크기를 사용하지 않는 한 도움이되지 않습니다. 이 모든 상황은 미친 짓이다. 나는 Droid 3, HTC Inspire 및 두 개의 2.3 에뮬레이터를 테스트 중입니다. HTC는 맵을로드 할 것이고 에뮬레이터는 128MB의 (우스운) 힙 크기를 갖습니다. 이 앱의 배포는 다양한 Android 기기 사용자에게 적용되므로 2.3 대가 넘는 기기는 타겟팅 할 수 없습니다.android - Bitmapfactory oom을 피하기 위해 Canvas 대신 GLSurfaceView를 사용해야합니까?
BitmapFactory.Options o=new BitmapFactory.Options();
o.inJustDecodeBounds=true;
BitmapFactory.decodeResource(getResources(), resourceId, o);
//Find the correct scale value. It should be the power of 2.
int scale=16;
while((o.outWidth/scale)>=REQUIRED_SIZE || (o.outHeight/scale)>=REQUIRED_SIZE)
scale*=2;
BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = scale;
Bitmap base_image;
try {
base_image = BitmapFactory.decodeResource(getResources(), resourceId);
} catch (Error e1) {
base_image = BitmapFactory.decodeResource(getResources(), resourceId, options);
}
GLSurfaceView 여기 내 문제를 해결할 :
여기 (미안 해요 링크를 잃은 또 다른 SO 게시물에서) 나에게 사용할 수없는 이미지를 제공 내 현재 코드를입니까? 1) 평면도 이미지로드, 2) 프로그래밍 방식으로 객체 및 텍스트 레이블 그리기, 3) 평면도 좌표에 따라 확대/축소 및 반응을 지원할 수 있습니다. 이것이 답이라면 누구나 이런 기본적인 2D 작업을위한 좋은 자습서를 추천 할 수 있습니까?
힌트 : PNG의 파일 크기는 압축 될 때 아무 것도 의미하지 않습니다. 메모리에서 사용되는 경우 각 픽셀에 대해 32 비트 또는 16 비트 (4 또는 3 바이트)가 있습니다. 즉, 2500 x 1500 이미지는 15 메가 바이트의 메모리를 사용합니다. – Jave
맞아요, 나는 다른 질문에서 그것을 발견했습니다. 상황을 어떻게 해결할 것을 권하는거야? – cschryer