2017-01-21 12 views
0

Androidのカメラから画像をロードする必要があります。私はカメラ開くには、このコードを使用する:グライドがカメラの回転を認識しない

private void openCamera() 
{ 
    mMediaUri =getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 

    Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    photoIntent.putExtra(MediaStore.EXTRA_OUTPUT, mMediaUri); 
    startActivityForResult(photoIntent, REQUEST_TAKE_PHOTO); 

} 

private Uri getOutputMediaFileUri(int mediaTypeImage) 
{ 
    //check for external storage 
    if(isExternalStorageAvaiable()) 
    { 
     File mediaStorageDir = getActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES); 

     String fileName = ""; 
     String fileType = ""; 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new java.util.Date()); 

     fileName = "IMG_"+timeStamp; 
     fileType = ".jpg"; 

     File mediaFile; 
     try 
     { 
      mediaFile = File.createTempFile(fileName,fileType,mediaStorageDir); 
      absolutePath = mediaFile.getAbsolutePath(); 

     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
      Log.i("St","Error creating file: " + mediaStorageDir.getAbsolutePath() +fileName +fileType); 
      return null; 
     } 
     return FileProvider.getUriForFile(getActivity(), BuildConfig.APPLICATION_ID + ".provider", mediaFile); 
    } 
    //something went wrong 
    return null; 

} 

private boolean isExternalStorageAvaiable() 
{ 
    String state = Environment.getExternalStorageState(); 

    if(Environment.MEDIA_MOUNTED.equals(state)) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 


} 

これはonActivityResult()チェックインである:

else if(resultCode == RESULT_OK) 
    { 
     if (requestCode == REQUEST_TAKE_PHOTO || requestCode == REQUEST_PICK_PHOTO) //dalla fotocamera 
     { 

      if (data != null) //caso galleria 
      { 
       mMediaUri = data.getData(); 
       Glide.with(getActivity()).load(mMediaUri).centerCrop().into(photo); 
      } 
      else 
      { 

       Glide.with(getActivity()) 
         .load(mMediaUri) 
         .bitmapTransform(new CenterCrop(getActivity()), new RoundedCornersTransformation(getActivity(), 15, 2)) 
         .into(photo); 

      } 


     } 

問題は、いくつかのデバイスで(ヌガーとギャラクシーS4のようにインストールされる)ことであるグライドロード画像90度右のイメージを正しくロードします。 GlideはデフォルトでExifInterfaceを管理していますが、この場合は動作しません。 カメラでロードするときにのみこの問題が発生します。ギャラリーまたはバイト配列では、すべてが正しいモードでロードされます。

これを修正する方法はありますか? おかげ

+0

'data.getData()'を返します'ACTION_IMAGE_CAPTURE'は' Uri'を返すものではないため、何百万ものデバイス上の 'ACTION_IMAGE_CAPTURE'に対して' null 'を返します。あなたはすでに画像がどこにあるかを知っているので( 'mediaFile')、それを使用してください。 – CommonsWare

答えて

0

は最後に、私は、問題を発見し、この2行ですしました:

fileName = "IMG_"+timeStamp; 
    fileType = ".jpg"; 

ビットマップを使用して代わりにJpegかの問題が解決:

fileName = "IMG_"+timeStamp; 
fileType = ".bmp"; 
関連する問題