【问题标题】:Saving bitmap to internal/external storage in android studio将位图保存到android studio中的内部/外部存储
【发布时间】:2015-06-14 20:51:53
【问题描述】:

我在 android studio 中做了一个绘图应用程序。如何将绘图保存在内部存储中,然后在另一个活动中查看?我在互联网上有一些关于如何保存位图的代码,但它不起作用,我没有做错什么。我已经卡在这部分了。

以下是一些代码:

public onClick(View v){

if(v.getId() == R.id.btnBrush){
.....
}

else if(v.getId() == R.id.btnErase){
.....
}

else if(v.getId() == R.id.ibtnSave){
        //save button clicked
        final Dialog saveDialog = new Dialog(this);
        saveDialog.setTitle("Save");
        saveDialog.setContentView(R.layout.save_form);
        saveDialog.show();



        inputName = (EditText) findViewById(R.id.drawFile);
        inputDate = (EditText) findViewById(R.id.date);
        btnSave = (Button) saveDialog.findViewById(R.id.btnSave);
        btnCancel = (Button) saveDialog.findViewById(R.id.btnCancel);

        btnSave.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                iView.setDrawingCacheEnabled(true);
                save();
                saveDialog.dismiss();

                Intent intent = new Intent(DrawingPanel.this, Gallery.class);
                startActivity(intent);
                finish();

                iView.destroyDrawingCache();


            }
        });

        btnCancel.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                saveDialog.dismiss();
            }
        });
    }
}

public void save(){
    Bitmap bitmap = iView.getDrawingCache();

    try{
        FileOutputStream fos = openFileOutput(inputName.getText().toString() + ".png", Context.MODE_PRIVATE);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
        if(fos != null){
            Toast saved = Toast.makeText(getApplicationContext(), "Image saved.", Toast.LENGTH_SHORT);
            saved.show();
        }
        else{
            Toast unsaved = Toast.makeText(getApplicationContext(), "Image not save.", Toast.LENGTH_SHORT);
            unsaved.show();
        }

        fos.close();
    }

    catch(Exception e){
        Log.e("save()", e.getMessage());
    }
}

我也想在上面加上日期,但我就是不知道怎么做。我真的很抱歉伙计们。我只是 android studio 的新手,我并不擅长这就是为什么我需要帮助,因为我真的很想学习。

【问题讨论】:

  • 您是否在“manifest.xml”中添加了权限?
  • inputName.getText().toString() 。您应该准确说出您在其中输入的内容。
  • it won't work。那么你应该更好地告诉究竟什么是行不通的。你的代码流了多远?有任何异常或错误吗?
  • if(fos != null)。这并不能说明是否有东西得救了。最好检查 bitmap.compress() 的返回值..

标签: android android-bitmap android-external-storage internal-storage


【解决方案1】:
public void save(){

    Bitmap bitmap = iView.getDrawingCache();

    try{
    if(bitmap!=null){

        File file=new File(Environment.getExternalStorageDirectory()+"/dirr");
        if(!file.isDirectory()){
            file.mkdir();
        }

        file=new File(Environment.getExternalStorageDirectory()+"/dirr",inputName.getText()+"_"+System.currentTimeMillis()+".jpg");

        try 
        {
            FileOutputStream fileOutputStream=new FileOutputStream(file);
            if(bitmap.compress(Bitmap.CompressFormat.JPEG,100, fileOutputStream))
            {
                Toast saved = Toast.makeText(getApplicationContext(), "Image saved.", Toast.LENGTH_SHORT);
                saved.show();
            }
            else{
                Toast unsaved = Toast.makeText(getApplicationContext(), "Image not save.", Toast.LENGTH_SHORT);
                unsaved.show();
            }


        }
        catch(IOException e){
            e.printStackTrace();
        }
        finally {
             try {
               if (fileOutputStream!= null) {
                 // fileOutputStream.flush();
                  fileOutputStream.close();
               }
            } catch (IOException e) {
                   e.printStackTrace();
               }
       }

    }
        catch(Exception e){
            Log.e("save()", e.getMessage());
        }   
}

并在清单中添加权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

编辑:刚刚清理了一下代码,你也可以看看类似的问题:

Save bitmap to location

Save Bitmap into File and return File having bitmap image

How to save a bitmap on internal storage

【讨论】:

  • if(fileOutputStream!= null)。错误的。您应该检查 bitmap.compress 的返回值。
  • @AB,我试过你的代码,但最后的 fileOutputStream 有错误。它还说“终于”没有“尝试”。
  • 我仍然需要这方面的帮助。它不会保存任何东西。每次我尝试保存时它都会崩溃。
  • 如何查看bitmap.compress的返回值?
  • 它说 file.mkdir() 被忽略了
猜你喜欢
  • 1970-01-01
  • 2015-01-26
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
相关资源
最近更新 更多