2013-03-10 3 views
7

Android 앱을 만들고 있는데 이미지를 비트 맵에로드하고 '손가락 집게 확대'제스처를 사용하여 크기를 조정해야합니다. 그러나 이미지가 특정 크기를 초과하면 응용 프로그램이 충돌합니다 (OutOfMemory 예외). 이미지로드 및 조작을 최적화하려면 어떻게합니까? 큰 비트 맵을 Android로로드하는 중

은 내가 사용하는 이미지를로드하려면 :

BitmapFactory.decodeResource (ctx.getResources(), R.drawable.image) 

그것을 그리려면 :

imgCanvas.drawBitmap (image, posX, posY, null), 

그 크기를 변경하려면 :

Bitmap.createScaledBitmap (originalBitmap, neww, NEWH, true); 

답변

3

이 사소한 없습니다. 이미지의 현재 규모와 이미지의 현재 보이는 부분을 바탕으로

만 적절한 해상도로 그 이미지의 일부를로드 :
https://developer.android.com/reference/android/graphics/BitmapRegionDecoder.html

확대 아웃 당신은 보여주고 싶은 ,
https://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize

이 확대 : 전체 이미지가 값 1보다 큰 (2의 거듭 제곱 인 것이 바람직 값) inSampleSizeBitmapFactory.Options 파라미터를 가지고이 BitmapRegionDecoder 클래스의 방법을 사용하고 설정, 축소 먼저 확대 이미 표시된 (inSampleSize> 1 값을 사용했던) 낮은 해상도와 BitmapRegionDecoder을 사용하는 고해상도 버전 (이전의 값보다 inSampleSize이 더 작음)을 느리게로드하고 고해상도 버전을 점차적으로 페이드 인합니다.

사용자가이 확대되면 inSampleSize 때까지이 일을 계속 1.

+0

내가 처음에 (inSampleSize를 = 1) 원래 크기로 이미지를로드합니다. "확대"할 때 값이 1보다 큰 inSampleSize를 변경 한 다음 이미지를 자르지 않아야합니까? – Giammy

+0

사용자가 확대하기 전에 전체 이미지를 inSampleSize> 1로로드합니다. 그런 다음 사용자가 확대하면 특정 지점에서 이미지를 다시로드하지만 크기가 작은 inSampleSize가있는 이미지 만로드합니다 (단, 여전히 1 이상). 사용자가 몇 번이고 다시 확대하면 어떤 시점에서 inSampleSize = 1이됩니다. 그러면 보이는 부분 만로드됩니다. –

관련 문제