从android寻呼机将图像保存到sd卡
Posted
技术标签:
【中文标题】从android寻呼机将图像保存到sd卡【英文标题】:Saving an image to sd card from android pager 【发布时间】:2013-07-17 23:32:54 【问题描述】:我的 android 应用程序中有一个寻呼机活动,我需要根据寻呼机中的位置保存图像。我设法完成了保存部分,但是当我在第一张图像中单击保存时,它保存第二张图像与第二张图像相同,它保存第三张我不知道我的代码有什么问题! `
enter code here
public boolean onOptionsItemSelected(MenuItem item)
// Handle item selection
if (item.getItemId()==R.id.menuFinale)
ImageView imageView = (ImageView) findViewById(R.id.image_one);
imageView.setDrawingCacheEnabled(true);
Bitmap bitmap = imageView.getDrawingCache();
File root = Environment.getExternalStorageDirectory();
MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "My pic" ,"Saved to gallery");
File file = new File(root.getAbsolutePath()+"/DCIM/Camera/img.jpg");
try
file.createNewFile();
FileOutputStream ostream = new FileOutputStream(file);
bitmap.compress(CompressFormat.JPEG, 100, ostream);
ostream.close();
catch (Exception e)
e.printStackTrace();
return true;
else
return super.onOptionsItemSelected(item);
【问题讨论】:
我的朋友是 android 新手,我在我的应用程序中使用了该代码,它运行良好 你在 pagerView 中使用过它吗? 不用于画廊视图 这就是我的观点,当我将图像打开到全屏时,这段代码在画廊和网格视图中为我工作,但在寻呼机中它保存下一张图像而不是我站在它上面的图像很奇怪 【参考方案1】:尝试以下方法:
button=(Button)vi.findViewById(R.id.button_save);
button.setOnClickListener(new OnClickListener()
private Bitmap bm;
private String PREFS_NAME;
public void onClick(View arg0)
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/saved_images");
if(!myDir.exists())
myDir.mkdirs();
bm = BitmapFactory.decodeResource( mContext.getResources(), images[itemPos]);
holder.image.setImageBitmap(bm);
SharedPreferences savedNumber = mContext.getSharedPreferences(PREFS_NAME, 0);
int lastSavedNumber = savedNumber.getInt("lastsavednumber",0);
lastSavedNumber++;
String fname = "Image-"+lastSavedNumber+".png";
File file = new File (myDir, fname);
if (file.exists ()) file.delete ();
try
FileOutputStream out = new FileOutputStream(file);
bm.compress(Bitmap.CompressFormat.PNG, 100, out);//Your Bitmap from the resouce
out.flush();
out.close();
catch (Exception e)
e.printStackTrace();
SharedPreferences saveNumber = mContext.getApplicationContext().getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editorset = saveNumber.edit();
editorset.putInt("lastsavednumber",lastSavedNumber);
editorset.commit();
Toast.makeText(mContext, "saved", Toast.LENGTH_SHORT). show(););
希望能帮到你。
【讨论】:
我没有兄弟,但谢谢它似乎在运行时给了我错误 问题在于我的代码中的 getDrawingCache() 没有获得正确的图像它正在获得第二张图像,而不是我的代码中有什么问题?【参考方案2】:我终于设法解决了我的问题,而不是我所指的缓存,我必须改为使用 ViewPager 来缓存包括 imageView 在内的所有内容,而不是这里是我的新代码
enter code here
public boolean onOptionsItemSelected(MenuItem item)
// Handle item selection
if (item.getItemId()==R.id.menuFinale)
pager.setDrawingCacheEnabled(true);
pager.buildDrawingCache(true);
pager.setDrawingCacheEnabled(true);
Bitmap b = pager.getDrawingCache(true);
File root = Environment.getExternalStorageDirectory();
MediaStore.Images.Media.insertImage(getContentResolver(), b, "My pic" ,"Saved to gallery");
File file = new File(root.getAbsolutePath()+"/DCIM/HD.jpg");
try
file.createNewFile();
FileOutputStream ostream = new FileOutputStream(file);
b.compress(CompressFormat.JPEG, 100, ostream);
ostream.close();
catch (Exception e)
e.printStackTrace();
return true;
else
return super.onOptionsItemSelected(item);
【讨论】:
以上是关于从android寻呼机将图像保存到sd卡的主要内容,如果未能解决你的问题,请参考以下文章
将图像从 Android 上的可绘制资源保存到 sdcard