2017-03-21 17 views
0

私のコードでは、ビットマップではnullが返されますが、Imageは正常に作成され、uriは正常ですが、BitmapFactory.decodeFile()はnullを返します。Androidでフラグメントからカメラを取得する方法

Iはコード以下断片用いる:私はonActivityResultにビットマップにヌル得たが、私はこの画像からURIを得た上記のコードで

public class CameraImage extends Fragment { 

private static final int TAKE_PHOTO_CODE = 1888; 
Button button; 
private Uri fileUri1,fileUri; 
ImageView imageView; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    final View rootView = inflater.inflate(R.layout.camera_image, 
      container, false); 

    button = (Button) rootView.findViewById(R.id.button); 
    imageView = (ImageView) rootView.findViewById(R.id.imageview); 

    button.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    fileUri1 = getOutputMediaFileUri(); 
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
    startActivityForResult(cameraIntent, TAKE_PHOTO_CODE); 

     } 
    }); 

    return rootView; 

} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == TAKE_PHOTO_CODE) { 
     if (resultCode == Activity.RESULT_OK) { 

      BitmapFactory.Options options; 


       try { 
        Bitmap bitmap = BitmapFactory.decodeFile(pathname); 
        showDialog(bitmap, 1); 
       } catch (OutOfMemoryError e) { 
        try { 
         options = new BitmapFactory.Options(); 
         options.inSampleSize = 2; 
         Bitmap bitmap = BitmapFactory.decodeFile(pathname, options); 
         imageView.setImageBitmap(bitmap); 
        } catch (Exception e2) { 
         Log.e("Camera", "" + e2 + " " + e); 
        } 
       } 
     } 
    }   
} } 

public Uri getOutputMediaFileUri() { 
    return Uri.fromFile(getOutputMediaFile()); 
} 

private static File getOutputMediaFile() { 

    File mediaStorageDir = new File(
      Environment 
        .getExternalStoragePublicDirectory(MyApplication.getAppContext().getFilesDir().getAbsolutePath()), 
      IMAGE_DIRECTORY_NAME); 

    if (!mediaStorageDir.exists()) { 
     if (!mediaStorageDir.mkdirs()) { 
      Log.d(IMAGE_DIRECTORY_NAME, "Oops! Failed create " 
        + IMAGE_DIRECTORY_NAME + " directory"); 
      return null; 
     } 
    } 
    // Create a media file name 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", 
      Locale.getDefault()).format(new Date()); 
    File mediaFile; 

    try { 
     mediaFile = File.createTempFile(
       "IMG_" + timeStamp, 
       ".jpg",   
       mediaStorageDir  
     ); 
    } catch (Exception e) { 
     Log.e("Camera", "" + e); 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator 
       , "IMG_" + timeStamp + ".jpg"); 
    } 
    return mediaFile; 
} 

をその位置に存在します。

答えて

2

cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

を変更することにより、

をonActivityResultのコードの下に:

Bitmap photo = (Bitmap) data.getExtras().get("data"); 
       Log.i(TAG, "" + photo + "/" + data.getExtras().get("data") + "/" + data.getData()); 
       showDialog(photo, 1); 

2 onActivityResult内のコードの下に使用して)完全な品質のIMMAGE:

コンパイル 'com.mindorks:paracamera:0.2.2'

BitmapFactory.Options options; 
       options = new BitmapFactory.Options(); 
       options.inSampleSize = 2; 
       Bitmap bitmap = BitmapFactory.decodeFile(pathname, options); 
       showDialog(bitmap, 1); 

3)簡単かつ快適第三者を使用

paracamera github

0

私は私の質問に解決:使用して)

1サムネイル画像を:私たちはカメラを経由して取得することができます画像の2種類があります

cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri1); 
+0

ちょうど私の間違い –

+0

あなたはどこか別の変数 'fileUri'を持っていますか?あなたがここに投稿したコードにはありません。 –

+0

@ Code-Apprentice今すぐチェック –

関連する問題