2013-03-03 3 views
9

イメージには543 * 6423の解像度があり、すべてのデバイスに表示します。それは高解像度を可能にするアンドロイドの携帯電話のいくつかで表示されます。私は試しました一部の電話機のテクスチャにアップロードするにはビットマップが大きすぎます

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

+0

http://stackoverflow.com/questions/22633638/prevent-bitmap-too-large-to-be-uploaded-into-a-texture-android/24123605#24123605 私の答えをチェックしてください – Gilbert92

答えて

4

あなたのイメージは、おそらくほとんどのデバイス上に表示するには大きすぎます。したがって、画像の縮小版をロードする必要があります。 Loading Large Bitmaps Efficientlyを参照して、これを行い、適切なサンプルサイズを計算する方法を参照してください。 ディスプレイの幅と高さが必要な場合(フルスクリーンイメージの場合)、getResources().getDisplayMetrics()を使用できます。

0

私はあなたを手助けするには遅すぎるかもしれませんが、これはうまくいけば他人を助けることができます。私は最近、大きなイメージの読み込みを処理できるオープンソースライブラリを開発しました。ソースコードとサンプルここ

がソリューションです...ブログ内の溶液が2のべき乗によって間違っているhttps://github.com/diegocarloslima/ByakuGallery

0

で入手できます。

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); 
関連する問題