android - 在 Android 上从服务器加载大图像

标签 android bitmap imageview

我正在尝试将来自服务器的 jpg 文件显示到 imageView 中。当我尝试加载较小的图像 (300x400) 时,没有任何问题。但是当我尝试加载全尺寸图片 (2336x3504) 时,图像不会加载。图像的文件大小只有 2mb。我在 logcat 中没有收到任何错误,也没有抛出任何异常。它根本不会加载图像。我也试过用这个:

BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 8;
Bitmap preview_bitmap=BitmapFactory.decodeStream(is,null,options);

这对加载大文件没有任何帮助,但它确实调整了较小图像的大小(就像它假设的那样)。我确实将大图片添加到我的资源中并对其进行了测试,就好像它已嵌入到应用程序中一样并且运行良好,只是无法在服务器上运行。我整天都在为此工作,似乎无法弄清楚如何加载这些大图片。谁能帮我解决这个问题?感谢您提供任何信息。

Here是我找到上面代码的链接,并且一直在玩其他示例但仍然无法正常工作。

编辑:

这是我正在使用的代码,用于加载图像:

public static Bitmap getBitmapFromURL(String src) {
    Bitmap bmImg;
    URL myFileUrl = null;

    try {
        myFileUrl = new URL(src);

        HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
        conn.setDoInput(true);
        conn.connect();
        InputStream is = conn.getInputStream();

        BitmapFactory.Options options=new BitmapFactory.Options();
        options.inSampleSize = 16;

        bmImg = BitmapFactory.decodeStream(is, null, options);
        return bmImg;
    } catch (Exception e) {
        // TODO Auto-generated catch block
        Log.d("Error", e.toString());
        return null;
    }
}

这是 logcat 屏幕截图(无法弄清楚如何在 eclipse 中适本地复制文本)我在点击按钮加载图像之前清除了日志。所以你所看到的就是当我按下那个按钮时发生的事情。我删除了公司和应用程序名称(你看到“com.”的地方,假设它是“com.mycompany.myapp”。 Logcat Screenshot

最佳答案

BitmapFactory.decodeFromStream() 在您将它直接连接到远程连接。在内部,如果您没有向该方法提供 BufferedInputStream,它将把提供的流包装在一个缓冲区大小为 16384 的流中。有时可行的一种选择是传递 BufferedInputStream 具有更大的缓冲区大小,例如:

BufferedInputStream bis = new BufferedInputStream(is, 32 * 1024);

一个更普遍有效的方法是先完整下载文件,然后像这样解码数据:

InputStream is = connection.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is, 8190);

ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
    baf.append((byte)current);
}
byte[] imageData = baf.toByteArray();
BitmapFactory.decodeByteArray(imageData, 0, imageData.length);

仅供引用,此示例中的缓冲区大小有些随意。正如在其他答案中所说的那样,不要在内存中保留比您必须的更长的图像大小是一个绝妙的主意。您可能会考虑将其直接写入文件并显示缩减采样版本。

希望对您有所帮助!

关于android - 在 Android 上从服务器加载大图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4996470/

相关文章:

java - AsyncTask 与 ImageView 发生错误

android - 传感器和 min3d ANDROID

java - api低于26的设备如何使用base 64?

Android:如何为App Widget添加阴影

java - 如何对非常大的 BMP 进行图像处理?

android:通过 picasso 从网络加载按钮背景图像

android - 同一 fragment 的多个实例 : Android Navigation Component

Android:复制位图

objective-c - 增加图像中像素之间的距离

android - 如何将第一个Activity的ImageView共享并保存到第三个Activity