2016-10-18 7 views
1

ギャラリーから画像を選択して、内部のストレージに保存しようとしました。
ファイルは保存されていますが、破損しています。それはイメージを表示していません。
私は今何をしなければならないのか分かりますか?ここでファイルを保存したのに内部ストレージに画像を保存しようとしましたが、破損しています。

は、私が得た画像です: Here is image I got

public class ImageUpload extends android.app.Fragment 
    { 
     ImageView image; 
     String img_str; 


     Button upload; 

     Bitmap finalBitmap; 

     private static final int CONTENT_REQUEST=1337; 
     private File output=null; 

     @Nullable 
     @Override 
     public View onCreateView(LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable Bundle savedInstanceState) { 
      View v=inflater.inflate(R.layout.activity_imageupload,container,false); 
      image=(ImageView)v.findViewById(R.id.image); 
      upload=(Button)v.findViewById(R.id.upload); 



      /* Bitmap bitmap = image.getDrawingCache();*/ 
      image.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 

        Intent i = new Intent(); 
        i.setAction(Intent.ACTION_PICK); 
        i.setType("image/*"); 
        i.setAction(Intent.ACTION_GET_CONTENT); 
        startActivityForResult(
          Intent.createChooser(i, "Select Picture"), 1); 

         save Image(); 
         } 
      }); 
      image.buildDrawingCache(); 
      finalBitmap = image.getDrawingCache(); 

      return v; 
     } 
     @Override 
     public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      // TODO Auto-generated method stub 
      if (resultCode == MainActivity.RESULT_OK) { 
       if (requestCode == 1) { 
        Uri selectedImageUri = data.getData(); 
        selectedImagePath = getPath(selectedImageUri); 
        System.out.println("Image Path : " + selectedImagePath); 
        image.setImageURI(selectedImageUri); 
        image.setDrawingCacheEnabled(true); 

       } 
       else if (requestCode == CONTENT_REQUEST) { 
        if (resultCode == 1337) { 
         Intent i=new Intent(Intent.ACTION_VIEW); 

         i.setDataAndType(Uri.fromFile(output), "image/jpeg"); 
         startActivity(i); 
         getActivity().finish(); 
        } 
       } 
      } 
      super.onActivityResult(requestCode, resultCode, data); 
     } 
     public String getPath(Uri uri) { 
      String[] projection = { MediaStore.Images.Media.DATA }; 
      Cursor cursor = getActivity().getContentResolver().query(uri, 
        projection, null, null, null); 
      if (cursor == null) 
       return null; 
      int column_index = cursor 
        .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
      cursor.moveToFirst(); 
      String s = cursor.getString(column_index); 
      cursor.close(); 

      return s; 
     } 
     public String image() { 
      image.buildDrawingCache(); 
      finalBitmap = image.getDrawingCache(); 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      finalBitmap.compress(Bitmap.CompressFormat.PNG, 90, stream); 
      byte[] image = stream.toByteArray(); 
      System.out.println("byte array:" + image); 

      img_str = Base64.encodeToString(image, 0); 
      Toast.makeText(getActivity(), img_str, Toast.LENGTH_LONG).show(); 
      System.out.println("string:" + img_str); 
      return null; 
     } 
    private void save Image() { 

      String root = Environment.getExternalStorageDirectory().toString(); 
      File myDir = new File(root + "/hello_images"); 
      myDir.mkdirs(); 
      Random generator = new Random(); 
      int n = 10000; 
      n = generator.nextInt(n); 
      String fname = "Image-"+ n +".jpg"; 
      File file = new File (myDir, fname); 
      if (file.exists()) file.delete(); 
      try { 
       FileOutputStream out = new FileOutputStream(file); 
       finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 
       out.flush(); 
       out.close(); 
    } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }` 
+0

をSDCARDするOnActivityResult

Bitmap bmp = BitmapFactory.decodeFile(image_path); thumb.setImageBitmap(bmp); saveImageFile(bmp); 

ビットマップを保存し、このコードを追加しますか? –

+0

あなたは選択された画像のURIを持っています。 uriを使用すると、ファイルを簡単にコピーできます。なぜあなたはまず画像を画像ビューに入れてから、画像ファイルに入れるデータを抽出するためにあらゆる種類の手のひらを実行するのですか?理解していない。 – greenapps

+0

Ganesh Pokale私の問題は内部ストレージにイメージを保存していますが、問題はイメージが表示されていないことです。上記の空白のイメージが表示されます.iはどこに問題があるのか​​わかりません –

答えて

1

右..あなたは、SDカードするImageViewのから画像を保存する方法

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; 
    } 
+0

Ganesh Pokale私はdrawableからビットマップを取得できませんでした私は私のギャラリーから得ました私は私の電話の別の場所にこれを保存したいと思います。 –

+0

Ganesh Pokaleありがとうございましたが、私は内部メモリに同じイメージを持っています。私には私のことを教えてください。 –

+0

私たちはここからdrawable rightから取らなければならない画像のパスを教えてください。 –

0

あなたはfinalBitmap変数がどのような値を持っている前であってもsaveImage関数を呼び出している、あなたはキャッシュを描くのITとImageViewをクリックしたときに以下の関数を呼び出した場合は、それは動作する(必要に応じてパスを調整する)ことができます。

public File WriteBmpToFile(Bitmap bmp) { 
     String file_path = Environment.getExternalStorageDirectory().getAbsolutePath() + 
       "/.kyc"; 

     File dir = new File(file_path); 
     if (!dir.exists()) 
      dir.mkdirs(); 
     File file = new File(dir, "kyc_" + Calendar.getInstance().getTimeInMillis() + ".jpg"); 

     FileOutputStream fOut = null; 
     try { 
      fOut = new FileOutputStream(file); 
      bmp.compress(Bitmap.CompressFormat.JPEG, 85, fOut); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } finally { 

      try { 
       fOut.flush(); 
       fOut.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

     return file; 
    } 
関連する問題