2013-03-03 8 views
9

Mam obraz o rozdzielczości 543 * 6423, chcę go wyświetlić na wszystkich urządzeniach. Wyświetla się w kilku telefonach z Androidem, co pozwala na wysoką rozdzielczość. Próbowałem zBitmapa zbyt duża, aby zostać przesłana do tekstury w niektórych telefonach

android:hardwareAccelerated="false" 

To jest mój kod Java.

File storagePath =Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_DOWNLOADS+ 
        "abc.png"); 
      InputStream is = this.getContentResolver().openInputStream(Uri.fromFile(storagePath)); 
      Bitmap b = BitmapFactory.decodeStream(is, null, null); 
      is.close(); 
      image.setImageBitmap(b); 

To działało w moim komórkowego (Sony Xperia), ale kilka innych telefonów nie pokazujemy go. Proszę mi pomóc, jak mogę wyświetlić ten obraz niezależnie od rozdzielczości ekranu.

Dzięki Aman

+1

zobaczyć [to] (http://stackoverflow.com/a/15136744/1289716) odpowiedź mam nadzieję, że ci to pomoże. – MAC

+0

http://stackoverflow.com/questions/22633638/prevent-bitmap-to-large-to-be-uploaded-into-a-texture-android/24123605#24123605 Sprawdź moją odpowiedź – Gilbert92

Odpowiedz

4

Twój obraz jest prawdopodobnie zbyt duża, aby być wyświetlane na większości urządzeń. Musisz więc załadować skalowaną wersję obrazu. Spójrz na Loading Large Bitmaps Efficiently, aby zobaczyć, jak to zrobić i obliczyć odpowiedni rozmiar próbki. Jeśli potrzebujesz szerokości/wysokości wyświetlacza (w przypadku obrazu pełnoekranowego), możesz użyć getResources().getDisplayMetrics().

0

Rozwiązaniem w blogu jest źle, o mocy 2 ...

Oto rozwiązanie:

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inJustDecodeBounds = true; 

// Set height and width in options, does not return an image and no resource taken 
BitmapFactory.decodeStream(imagefile, null, options); 

int pow = 0; 
while (options.outHeight >> pow > reqHeight || options.outWidth >> pow > reqWidth) 
    pow += 1; 
options.inSampleSize = 1 << pow; 
options.inJustDecodeBounds = false; 
image = BitmapFactory.decodeStream(imagefile, null, options); 

Obraz zostanie przeskalowany w dół o wielkości reqHeight i ReqWidth. Jak rozumiem, w SampleSize przyjmujemy tylko moc 2 wartości.

3

spróbuj

android:hardwareAccelerated="false" 
android:largeHeap="true" 
0

Zamiast spędzać czas na godziny próbuje pisać i debugowania wszystkie Kod przeprowadzający downsampling ręcznie, to dlaczego nie spróbować użyć Picasso? Jest to popularna biblioteka do wczytywania obrazów i została stworzona do obsługi map bitowych wszystkich typów i/lub rozmiarów. Użyłem tej jednej linii kodu, aby usunąć mój "bitmapę zbyt duże ...." problem:

Picasso.with(image.getContext()).load(storagePath).fit().centerCrop().into(image); 
Powiązane problemy