0

Я сделал приложение для рисования в студии android. как сохранить чертеж во внутреннем хранилище и просмотреть его впоследствии в другом мероприятии? У меня есть некоторые коды в Интернете о том, как сохранить растровое изображение, но это не сработает, и я не делаю то, что я сделал неправильно. Я уже застрял в этой части.Сохранение растрового изображения во внутреннее/внешнее хранилище в студии android

Вот некоторые из кодов:

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()); 
    } 
} 

Я хочу, чтобы добавить дату на нем, как хорошо, но я просто не знаю, как это сделать. Мне очень жаль, ребята. Я просто новичок в андроид-студии, и я не очень хорош в этом, поэтому мне нужна помощь, потому что я действительно хочу учиться.

+0

Вы добавили разрешение в 'manifest.xml'? – Paritosh

+0

'inputName.getText(). ToString()'. Вы должны точно указать, что вы там набрали. – greenapps

+0

'это не сработает'. Ну, лучше сказать, что именно не работает. Как далеко проходит ваш код? Любые исключения или ошибки? – greenapps

ответ

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"/> 

EDIT: Просто очистить код немного, и вы посмотрите на подобные вопросы можно:

Save bitmap to location

Save Bitmap into File and return File having bitmap image

How to save a bitmap on internal storage

+0

'if (fileOutputStream! = Null)'. Неправильно. Вы должны проверить возвращаемое значение bitmap.compress. – greenapps

+0

Правда. спасибо за наблюдение. –

+0

@AB, я пробовал ваши коды, но в итоге у него есть ошибки с fileOutputStream. и он также говорит, что «наконец» без «попытки». – user3471140