2017-10-03 6 views
1

Je souhaite créer un fragment dans un fichier png et l'enregistrer sur l'appareil. Mais je ne comprends pas comment enregistrer le fichier sur le périphérique de stockage interne. Je reçois l'exception "FileNotFoundException e" lorsque j'essaie le programme.Créer un fragment dans un fichier image et l'enregistrer sur le disque dur interne du téléphone

Button save = (Button) findViewById(R.id.save); 
     save.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       View fragment = (View) findViewById(R.id.fragment2); 
       viewToBitmap(fragment); 
      } 
     } 
     ); 
    } 

    public Bitmap viewToBitmap(View view) { 
     Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(bitmap); 
     view.draw(canvas); 
     try { 
      FileOutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory() + "/path/to/file.png"); 

      bitmap.compress(Bitmap.CompressFormat.PNG, 100, output); 
      output.close(); 
     } catch (FileNotFoundException e) { 
      Toast.makeText(this, "Error1", Toast.LENGTH_SHORT).show(); 
      e.printStackTrace(); 
     } catch (IOException e) { 
      Toast.makeText(this, "Error2", Toast.LENGTH_SHORT).show(); 
      e.printStackTrace(); 
     } 
     return bitmap; 
    } 

Répondre

0

Vous créez un FileOutputStream mais vous n'avez pas créé de fichier avant cela. Vous devez créer un FileFolder et un fichier avant d'écrire un flux de sortie dans ce fichier. Code corrigé ci-dessous pour votre méthode viewToBitmap

public Bitmap viewToBitmap(View view) { 
       Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); 
       Canvas canvas = new Canvas(bitmap); 
       view.draw(canvas); 
       try { 
       File tempFolder = new File(Environment.getExternalStorageDirectory() + "/path/to"); 
       if (!tempFolder.exists()) tempFolder.mkdirs(); 
       File tempFile = File.createTempFile("tempFile", ".jpg", tempFolder); 
         FileOutputStream output = new FileOutputStream(tempFile); 
         bitmap.compress(Bitmap.CompressFormat.PNG, 100, output); 
         output.close(); 
       } catch (FileNotFoundException e) { 
        Toast.makeText(this, "Error1", Toast.LENGTH_SHORT).show(); 
        e.printStackTrace(); 
       } catch (IOException e) { 
        Toast.makeText(this, "Error2", Toast.LENGTH_SHORT).show(); 
        e.printStackTrace(); 
       } 
       return bitmap; 
      }