Pytanie Domyślny rozmiar bitmapy z rzeczywistego Uri, przed wczytaniem skali


Jeśli masz Uri i potrzebujesz Bitmap, teoretycznie możesz to zrobić

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

ale za każdym razem się zawali,

więc robisz to .........

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() );

jest to fantastyczny i jest rozwiązaniem roboczym.

Zwróć uwagę na współczynnik "czwórki", który zwykle działa dobrze, w obecnych warunkach (2014) z typowymi rozmiarami kamer itp. JEDNAKŻE byłoby najlepiej zgadnij lub dowiedz się dokładnie rozmiar danych obrazu w theUri, a następnie używając tych informacji, inteligentnie wybierz ten czynnik.

W skrócie, jak poprawnie wybrać ten współczynnik skali kiedy ładujesz Uri?

Eksperci Android, czy jest to znany problem, czy istnieje rozwiązanie? Dziękujemy od znajomych iOS-> Android! :)


14
2018-06-10 07:39


pochodzenie




Odpowiedzi:


Zobacz przewodnik Androida na obsługa dużych bitmap.

W szczególności w tej sekcji:

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;

EDYTOWAĆ

W twoim przypadku zastąpisz decodeResource linia z:

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

23
2018-06-10 07:43