Android:如何将位图写入内部存储

Posted

技术标签:

【中文标题】Android:如何将位图写入内部存储【英文标题】:Android: How to write a Bitmap to internal storage 【发布时间】:2015-06-03 21:08:42 【问题描述】:

我正在制作一个从 URL 获取图像的应用程序。我希望能够将这些图像存储在手机上,这样如果 url 和以前一样,用户就不必等待图像加载,而是应用程序将其拉起(因为它已经收到一次)。

这是我现在的代码:

            URL url2 = new URL("http://ddragon.leagueoflegends.com/cdn/5.9.1/img/champion/" + champ + ".png");
            InputStream is = new BufferedInputStream(url2.openStream());
            //Save is to file
            FileOutputStream fos = null;
            try 
                fos = context.openFileOutput("temp_file", Context.MODE_PRIVATE);
                int b;
                while( (b = is.read()) != -1)
                    fos.write(b);
                
                fos.close();
             catch (FileNotFoundException asdf) 
                asdf.printStackTrace();
            
            bd = BitmapFactory.decodeStream(is);

但是,位图没有 fos.write()。另外,我也不确定如何超出文件。

任何帮助都会很棒:)

【问题讨论】:

【参考方案1】:

Bitmap 类有一个compress() 方法用于写入OutputStream

bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);

这将使用无损的 PNG 格式压缩位图,因此您不会因为压缩而牺牲图像质量。

要在写入后访问文件,请使用BitmapFactorydecodeFile()方法

Bitmap bitmap = BitmapFactory.decodeFile(pathToFile);

【讨论】:

那么使用第一行代码,我会有一个“temp_file”文件吗? pathToFile 只是“temp_file”吗? 最终,您的文件名不会是temp_file,而是根据您正在缓存的图像命名。看起来您的 champ 变量可能适用于此。这样你就有了一个查询缓存的键。

以上是关于Android:如何将位图写入内部存储的主要内容,如果未能解决你的问题,请参考以下文章

如何将位图保存在从 Internet 下载的内部存储中

如何将位图添加到电话库?

将json数据写入和读取到内部存储android

将位图从片段保存到内部/外部存储[关闭]

写入 Android 中的内部私有存储

Xamarin Forms:在 Android 设备的内部存储中写入文件