11

我有 543*6423 分辨率的图像,我想在所有设备上显示它。它在少数允许高分辨率的安卓手机中显示。我试过了

android:hardwareAccelerated="false"

这是我的android客户端的 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)中有效,但很少有其他手机没有显示它。请帮助我如何独立于屏幕分辨率显示此图像。

谢谢,阿曼

4

5 回答 5

4

您的图像可能太大而无法在大多数设备上显示。因此,您必须加载图像的缩小版本。查看Loading Large Bitmaps Efficiently以了解如何执行此操作并计算适当的样本大小。如果您需要显示宽度/高度(如果是全屏图像),您可以使用getResources().getDisplayMetrics().

于 2013-03-03T08:00:08.547 回答
4

尝试

android:hardwareAccelerated="false" 
android:largeHeap="true"
于 2014-05-06T10:44:42.153 回答
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 个值的幂。

于 2014-02-27T12:41:01.977 回答
0

好吧,也许我为时已晚,无法帮助您,但这有望对其他人有所帮助。我最近开发了一个可以处理大图像加载的开源库。源代码和示例可在https://github.com/diegocarloslima/ByakuGallery获得

于 2014-01-04T22:19:46.310 回答
0

与其花费数小时尝试手动编写和调试所有这些下采样代码,不如尝试使用毕加索?它是一个流行的图像加载库,用于处理所有类型和/或大小的位图。我已经使用这行代码来消除我的“位图太大......”问题:

Picasso.with(image.getContext()).load(storagePath).fit().centerCrop().into(image);
于 2015-11-07T21:02:29.110 回答