2013-03-03 23 views
9

我有543 * 6423分辨率的圖像,我想將其顯示在所有設備中。這是顯示在少數的Android手機,允許高分辨率。我試過位圖太大而無法上傳到某些手機的紋理中

android:hardwareAccelerated="false" 

這是我的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); 

這工作在我的手機(索尼xperia),但很少其他手機不顯示它。 請幫助我如何顯示獨立於屏幕分辨率的圖像。

感謝, 阿曼

+1

參見[這](http://stackoverflow.com/a/15136744/1289716)的答案,希望它能幫助你。 – MAC 2013-03-03 05:40:52

+0

http://stackoverflow.com/questions/22633638/prevent-bitmap-too-large-to-be-uploaded-into-a-texture-android/24123605#24123605 看看我的答案 – Gilbert92 2014-06-09 15:43:43

回答

4

您的圖片可能是過大的大多數設備顯示。所以你必須加載縮小版本的圖像。看看Loading Large Bitmaps Efficiently看看如何做到這一點,並計算出合適的樣本量。 如果您需要顯示寬度/高度(如果是全屏圖像),您可以使用getResources().getDisplayMetrics()

0

在博客的解決方案是錯了2的冪...

這裏是解決方案:

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

圖像將被向下縮放大小爲reqHeight和reqWidth。據我所知inSampleSize只有2個值的權力。

3

在幾個小時來編寫和調試所有這些代碼採樣嘗試手動與

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

,而不是花費數小時,爲什麼不嘗試用畢加索?它是一個流行的圖像加載庫,用於處理各種類型和/或大小的位圖。 我已經使用了這一行代碼刪除我的「位圖太大......」問題:

Picasso.with(image.getContext()).load(storagePath).fit().centerCrop().into(image); 
相關問題