0

두 개의 이미지 버튼이 있습니다. 하나는 갤러리에서 사진을 찍어 다른 활동에 표시하는 버튼입니다. 이것은 잘 작동합니다. 고품질의 사진을 표시합니다. 그러나 카메라에서 찍은 사진을 다른 활동에 표시하려고하면 오류가 발생합니다.이미지 뷰에서 다른 활동의 카메라에서 캡처 한 그림을로드하는 방법은 무엇입니까?

private static final int REQUEST_CAMERA = 1; 
private static int SELECT_FILE = 1; 
public static Uri selectedImageURI; 

if (take_photo != null) { 
     take_photo.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(intent,REQUEST_CAMERA); 

      } 
     }); 
    } 
    //to get the photo from gallery 
    if (get_photo != null) { 
     get_photo.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(i,SELECT_FILE); 


} 

if (resultCode == RESULT_OK) { 
     if (requestCode == SELECT_FILE) { 
      selectedImageURI = data.getData(); 
      File imageFile = new File(getRealPathFromURI(selectedImageURI)); 
      Intent intent = new Intent(this, ShowPhotoActivity.class); 
      intent.putExtra("imagePath", imageFile.toString()); 
      startActivity(intent);} 
     else if (requestCode != RESULT_CANCELED) 
     { 
      if(requestCode == REQUEST_CAMERA){ 
       Uri selectImageURI = data.getData(); 
       File imgFile = new File(getRealPathFromURI(selectImageURI)); 
       Intent i = new Intent(this,ShowPhotoActivity.class); 
       i.putExtra("imagePath",imgFile.toString()); 
       startActivity(i); 

      } 
     } }} 
     private String getRealPathFromURI(Uri contentURI){ 
      String result; 
      Cursor cursor = getContentResolver().query(contentURI,null,null,null,null); 
      if(cursor == null){ 
       result = contentURI.getPath(); 

      }else { 
       cursor.moveToFirst(); 
       int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
       result = cursor.getString(idx); 
       cursor.close(); 
      } 
     return result; 
    } 

showPhotoActivity.java :

String image_path = getIntent().getStringExtra("imagePath"); 
Bundle extras = getIntent().getExtras(); 
Uri uri = Uri.parse(extras.getString("imagePath")); 

    if (showPhoto != null) { 

     Bitmap bm = BitmapFactory.decodeFile(uri.getPath()); 
     showPhoto.setImageBitmap(bm); 
    } 

manifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

<uses-feature android:name="android.hardware.camera" /> 

로그 캣 :

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { act=inline-data (has extras) }} to activity {com.example.gentaliu.photoeditor/com.example.gentaliu.photoeditor.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getScheme()' on a null object reference 
                        at android.app.ActivityThread.deliverResults(ActivityThread.java:3840) 
                        at android.app.ActivityThread.handleSendResult(ActivityThread.java:3883) 
                        at android.app.ActivityThread.access$1700(ActivityThread.java:165) 
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1426) 
                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                        at android.os.Looper.loop(Looper.java:135) 
                        at android.app.ActivityThread.main(ActivityThread.java:5593) 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at java.lang.reflect.Method.invoke(Method.java:372) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
                       Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getScheme()' on a null object reference 
                        at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1477) 
                        at android.content.ContentResolver.query(ContentResolver.java:473) 
                        at android.content.ContentResolver.query(ContentResolver.java:426) 
                        at com.example.ga.photoeditor.MainActivity.getRealPathFromURI(MainActivity.java:96) 
                        at com.example.ga.photoeditor.MainActivity.onActivityResult(MainActivity.java:69) 
                        at android.app.Activity.dispatchActivityResult(Activity.java:6320) 
                        at android.app.ActivityThread.deliverResults(ActivityThread.java:3836) 
                        at android.app.ActivityThread.handleSendResult(ActivityThread.java:3883)  
                        at android.app.ActivityThread.access$1700(ActivityThread.java:165)  
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1426)  
                        at android.os.Handler.dispatchMessage(Handler.java:102)  
                        at android.os.Looper.loop(Looper.java:135)  
                        at android.app.ActivityThread.main(ActivityThread.java:5593)  
                        at java.lang.reflect.Method.invoke(Native Method)  
                        at java.lang.reflect.Method.invoke(Method.java:372)  
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)  
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)  

09-16 00 여기 내 코드 MainActivity.java입니다 : 46 : 51.149 27066-27066/c om.example.ga.photoeditor I/Process : 보내는 신호. PID : 27066 SIG : 9

+0

은 단순히 두 번째 활동에 경로를 디코딩. – Piyush

+0

코드를 보았습니까? 왜냐하면 내가 그랬지. –

답변

0
private static final int REQUEST_CAMERA = 1; 
private static int SELECT_FILE = 1; 
public static Uri selectedImageURI; 

if (take_photo != null) { 
     take_photo.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(intent,REQUEST_CAMERA); 
      } 
     }); 
    } 

    //to get the photo from gallery 
    if (get_photo != null) { 
     get_photo.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(i,SELECT_FILE); 
     } 
    }); 
} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
if (resultCode == RESULT_OK) { 
     if (requestCode == SELECT_FILE) { 
      selectedImageURI = data.getData(); 
      File imageFile = new File(getRealPathFromURI(selectedImageURI)); 
      Intent intent = new Intent(this, ShowPhotoActivity.class); 
      intent.putExtra("imagePath", imageFile.toString()); 
      startActivity(intent); 
      } 

     else if(requestCode == REQUEST_CAMERA){ 
      Bitmap bitmapImage = (Bitmap) intent.getExtras().get("data"); 
      Intent i= new Intent(this,ShowPhotoActivity.class); 
      i.putExtra("bitmap", bitmapImage); 
      startActivity(i); 

}else{ 
     //do something 
     } 
} 

private String getRealPathFromURI(Uri contentURI){ 
      String result; 
      Cursor cursor = getContentResolver().query(contentURI,null,null,null,null); 
      if(cursor == null){ 
       result = contentURI.getPath(); 

      }else { 
       cursor.moveToFirst(); 
       int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
       result = cursor.getString(idx); 
       cursor.close(); 
      } 
     return result; 
    } 

그리고 두 번째 활동에서 카메라의 비트 맵 이미지를 검색 :

private void getData(){ 

    Intent intent = getIntent(); 
    Bitmap bitmap = (Bitmap) intent.getParcelableExtra("Bitmap"); 
    img.setImageBitmap(bitmap); 

} 
+0

작동하지 않습니다. 비트 맵에서 symbole "intent"를 해결할 수 없습니다. bitmapImage = (비트 맵) intent.getExtras(). get ("data"); . 두 번째 활동의 이미지보기는 갤러리 사진과 카메라 그림 모두에서 동일합니다. 그래서 내가 문자열을 전달해야하고, uri로 구문 분석 한 다음 비트 맵으로 디코딩해야합니다. 일부 필터를 적용하기 때문입니다. 갤러리 사진으로 내가하고있는 것을 보아라, 나는 카메라 사진으로 똑같이하고 싶다. –

+0

'Bitmap bitmapImage = (Bitmap) data.getExtras(). get ("data");'의도 변수가'data'이기 때문에 사용하십시오. – W4R10CK

+0

그리고 내 갤러리 그림 코드를 손상시키지 않고 다른 활동에서 비트 맵을 검색하는 방법은 무엇입니까? –

관련 문제