将 ImageView 保存到 SD 卡(安卓)

4

我想将我在Android设备上用setImageURI显示的ImageView保存到SD卡中...

我该如何实现呢?

代码:

public class MainActivity extends ActionBarActivity {

ImageView imageView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    imageView = (ImageView) findViewById(R.id.imageView);

    imageView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent, "Select Image"), 1);
        }
    });
}

@Override
protected void onActivityResult(int reqCode, int resCode, Intent data) {
    if(resCode == RESULT_OK){
        if(reqCode == 1)
            imageView.setImageURI(data.getData());
    }
}

提前感谢。


我认为你可以从这里获得一些东西——>https://dev59.com/zWDVa4cB1Zd3GeqPgLpR https://dev59.com/zmgt5IYBdhLWcg3wvgBu - Chaudhary Amar
3个回答

8

使用以下方法将其保存到SD卡:

@Override
protected void onActivityResult(int reqCode, int resCode, Intent data) {
    if(resCode == RESULT_OK){
        if(reqCode == 1)
            imageView.setImageURI(data.getData());
            Bitmap bm=((BitmapDrawable)imageView.getDrawable()).getBitmap();
            saveImageFile(bm);
    }
}

    public String saveImageFile(Bitmap bitmap) {
            FileOutputStream out = null;
            String filename = getFilename();
            try {
                out = new FileOutputStream(filename);
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            return filename;
        }

        private String getFilename() {
            File file = new File(Environment.getExternalStorageDirectory()
                    .getPath(), "TestFolder");
            if (!file.exists()) {
                file.mkdirs();
            }
            String uriSting = (file.getAbsolutePath() + "/"
                    + System.currentTimeMillis() + ".jpg");
            return uriSting;
        }

非常感谢你兄弟 :) 无论如何,为什么“TestFolder”在相册中没有显示出来?但是,在文件管理器中它是显示的。 - William Salim
为了在画廊中显示,您需要向上述解决方案添加更多的代码。 - Pankaj

4
public class FileCache {

private File cacheDir;

public FileCache(Context context){
    //Find the dir to save cached images
    if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
        cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"TempImages");
    else
        cacheDir=context.getCacheDir();
    if(!cacheDir.exists())
        cacheDir.mkdirs();
}

public File getFile(String url) //url =http://image address
{
    String filename=String.valueOf(url.hashCode());
    File f = new File(cacheDir, filename);
    return f;

}

public void clear(){
    File[] files=cacheDir.listFiles();
    if(files==null)
        return;
    for(File f:files)
        f.delete();
}

}

0

尝试这个,在onActivityResult中

Uri imageUri = data.getData();
        Bitmap bmp = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);

FileOutputStream out = null;
try {
    out = new FileOutputStream(filename);
    bmp.compress(Bitmap.CompressFormat.PNG, 100, out);     
} catch (Exception e) {
    e.printStackTrace();
} finally {
    try {
        if (out != null) {
            out.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接