>

우리에게 Uri가 있고 Bitmap 가 필요한 경우 이론적으로이 작업을 수행 할 수 있습니다

Bitmap troublinglyLargeBmp =
  MediaStore.Images.Media.getBitmap(
      State.mainActivity.getContentResolver(), theUri );

그러나 매번 충돌합니다

이렇게하면 .........

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
AssetFileDescriptor fileDescriptor =null;
fileDescriptor =
  State.mainActivity.getContentResolver().openAssetFileDescriptor( theUri, "r");
Bitmap actuallyUsableBitmap
  = BitmapFactory.decodeFileDescriptor(
    fileDescriptor.getFileDescriptor(), null, options);
Utils.Log("'4-sample' method bitmap ... "
   +actuallyUsableBitmap.getWidth() +" "
   +actuallyUsableBitmap.getHeight() );

그것은환상적이고작동하는 솔루션입니다.

일반적인 카메라 크기 등의 현재 조건 (2014)에서 잘 작동하는 경향이있는 "4"의 요소에 주목하십시오. 그러나 이미지 데이터의 크기를 정확하게 추측하거나 배우는 것이 가장 좋습니다. theUri를 클릭 한 다음 해당 정보를 사용하여지적으로 해당 요소를 선택합니다.

즉, Uri를로드 할 때해당 스케일 팩터를 올바르게 선택하는 방법은 무엇입니까?

Android 전문가, 이것은 잘 알려진 문제입니까, 해결책이 있습니까? iOS->Android 친구로부터 감사합니다! :)

  • 답변 # 1

    큰 비트 맵 처리에 대한 Android 가이드를 참조하십시오.

    구체적으로이 섹션 :

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeResource(getResources(), R.id.myimage, options);
    int imageHeight = options.outHeight;
    int imageWidth = options.outWidth;
    String imageType = options.outMimeType;
    
    

    수정

    귀하의 경우 decodeResource 를 교체하십시오.  라인 :

    BitmapFactory.decodeFileDescriptor(fileDescriptor.getFileDescriptor(), null, options);
    
    

  • 이전 javascript - 페이지 기록 - 뒤로 버튼이 있습니까?
  • 다음 Proguard 후 Android 애플리케이션 충돌