我一直在使用系统保存截图的方式将位图保存到磁盘和图库中。这在Android4.2及之前版本中有效,但在Android3.3中无效。
相关代码:
Uri imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
OutputStream out = resolver.openOutputStream(uri);
此处为完整代码。
然而,在4.3(新的Nexus 7)中,我在第二行得到了FileNotFoundException。我在网站上看不到与此相关的4.3中的任何更改。
那么,将图像保存到磁盘和图库的正确方法是什么呢?
已验证:
我在我的清单中有这些许可。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
但是我使用的是目标SDK版本15。是否有要求您必须使用目标SDK 18?
顺便说一句:
这是从Facebook下载个人资料图片的示例代码:
private class DownloadProfilePicTask extends AsyncTask<Void,String,String> {
Bitmap profilePic;
String fileName;
String id;
String type;
URL img_value;
public DownloadProfilePicTask(String i,String ty)
{
id = i;
if(id==null)
{
//Log.v("Id is null", "Error");
}
//Log.v("Download Profile Pic Task initialized for id:",id);
type = ty;
}
@Override
protected String doInBackground(Void...param) {
String root = Environment.getExternalStorageDirectory().toString();
if(root==null)
{
return null;
}
try{
profilePic = BitmapFactory.decodeStream(img_value.openConnection().getInputStream());
}
catch (IOException e) {
e.printStackTrace();
}
if(profilePic == null)
{
//Log.v("profilePic is null", "Error");
}
//Log.v("Root for saving images",root );
File myDir = new File(root + "/saved_images");
myDir.mkdirs();
fileName = root + "/saved_images/" + id + ".png";
//Log.v("filename is ",fileName);
File file = new File (fileName);
fileName = file.getPath();
if (file.exists ()) file.delete ();
try {
FileOutputStream out = new FileOutputStream(file);
profilePic.compress(Bitmap.CompressFormat.PNG, 90, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
return id;
}
@Override
protected void onPreExecute()
{
try
{
img_value = new URL("http://graph.facebook.com/"+id+"/picture?type=" + type);
}
catch (MalformedURLException e) {
e.printStackTrace();
}
}
@Override
protected void onPostExecute(String result) {
}
}
然后我就打电话:
new DownloadProfilePicTask(id,type).execute();
下载并自动保存图像。
注意:您必须稍微使用文件路径才能获得确切的位置。
在清单文件中,尝试将目标sdk更改为18-
<uses-sdk android:minSdkVersion="7"
android:targetSdkVersion="18"/>
它可能会解决你的问题(可能不会)。在4.3 JELLY_BEAN_MR2中,Android做了一些更改,Android明确指出,您的应用程序在受限配置文件环境中可能会出现错误行为。所以,请看http://developer.android.com/about/versions/android-4.3.html
这是我将<code>位图
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri contentUri; //instantiate Uri with location of image
mediaScanIntent.setData(contentUri);
context.sendBroadcast(mediaScanIntent);
问题内容: 我的Express应用程序正在从浏览器中接收base64编码的PNG(使用toDataURL()从画布生成)并将其写入文件。但是该文件不是有效的图像文件,因此“文件”实用程序只是将其标识为“数据”。 问题答案: 我认为您正在转换的数据比您需要的更多。一旦使用正确的编码创建了缓冲区,您只需要将缓冲区写入文件即可。 new Buffer(…,’base64’)通过将输入解释为base64编
下面的代码在内存中创建了一个文件。 我想把那个pdf文件保存在磁盘上以便查看。我将如何在python中实现它?
我创建了一个简单的应用程序,裁剪图像。现在我想保存这个图像到消防基地。 如何将此图像保存到Firebase。我尝试了很多教程,但都没有成功。请用简单的代码验证。
问题内容: 我有一个小的PyGI项目,它使用开罗图像表面,然后使用表面图案缩放并在Gtk.DrawingArea上进行渲染。 我想将 缩放后的 版本写入PNG文件。我尝试使用Surface.write_to_png()从原始表面进行写操作,但是它仅以原始(即非缩放)大小进行写操作,因此我被困在那里。 然后我想我也许可以从Gtk.DrawingArea中获取渲染的图像并将其写入磁盘,但是我还没有找到
问题内容: 我正在显示一组图像,然后,如果用户希望,可以将图像保存到SD卡。我需要将其保存到外部存储的帮助。有人可以帮我这个忙吗? 网格视图: ImageAdapter: 问题答案: 嗨,我还没有使用过作为应用程序一部分提供的代码,但是我确实使用它来调试了其中一个应用程序在运行时生成的位图。 使用此代码,只要您有位图,就只需要此+清单权限 希望能帮到您 杰森
我试图使用以下命令保存png图像: 我的png文件在绘图的边界框周围到处都有棋盘格图案。在框内我可以看到字段,但棋盘格图案覆盖了轴标记、轴标签、打印标题等。 我创建的文件与此链接处的第三个图像非常相似。唯一的区别是,在那里你到处都可以看到棋盘。 问题:如何在没有这种棋盘格图案的情况下保存png图像?