-1

我需要從畫廊和相機拍照。就像詢問相機和畫廊的選項。目前,我能夠捕捉圖像並存儲在圖像視圖中。但不能從畫廊從畫廊和相機拍攝照片android

這是我的代碼採摘後再次從畫廊正在採取回相機上傳,

@BindView(R.id.selImage)按鈕selImage; @Nullable @BindView(R.id.uProfileImage)ImageView uProfileImage;私人Uri fileUri;

selImage.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      captureImage(); 
     } 
    }); 


private void captureImage() { 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 

    Log.e("FileURI", "captureImage: "+fileUri); 

    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

    // start the image capture Intent 
    startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE); 
} 



private void previewCapturedImage() { 
    try { 
     FileOutputStream out = null; 
     uProfileImage.setVisibility(View.VISIBLE); 

     // bimatp factory 
     BitmapFactory.Options options = new BitmapFactory.Options(); 

     // downsizing image as it throws OutOfMemory Exception for larger 
     // images 
     options.inSampleSize = 8; 

     final Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(), 
       options); 
     try { 

      out = new FileOutputStream(fileUri.getPath()); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100 , out); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     Log.e("Image", "previewCapturedImage: fileUri.getPath() "+fileUri.getPath()); 

     uProfileImage.setImageBitmap(getRoundedShape(bitmap)); 
    } catch (NullPointerException e) { 
     e.printStackTrace(); 
    } 
} 

保護無效onActivityResult(INT requestCode,INT發送resultCode, 意圖數據)

{

if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) { 
     if (resultCode == RESULT_OK) { 
      // successfully captured the image 
      // display it in image view 
      previewCapturedImage(); 


     } else if (resultCode == RESULT_CANCELED) { 
      // user cancelled Image capture 
      Toast.makeText(getApplicationContext(), 
        "User cancelled image capture", Toast.LENGTH_SHORT) 
        .show(); 
     } else { 
      // failed to capture image 
      Toast.makeText(getApplicationContext(), 
        "Sorry! Failed to capture image", Toast.LENGTH_SHORT) 
        .show(); 
     } 
    } 
} 

請建議我如何從庫中添加圖像,並在我的代碼存儲

回答

1

後你可以試試這個代碼。

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(resultCode==RESULT_OK){ 
      if(requestCode==1){ 
       onSelectFromGalleryResult(data); 
      }else if(requestCode==2){ 
       onCaptureImageResult(data); 
      } 
     } 
    } 

//OnClick For Gallary Button 
public void pickFromGal(View view){ 
     Intent getIntent = new Intent(
       Intent.ACTION_PICK, 
       android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI); 
     getIntent.setType("image/*"); 
     startActivityForResult(getIntent, 1); 
    } 
//OnClick Camera Button 
    public void pickFromCam(View view){ 
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(intent, 2); 
    } 



    private void onCaptureImageResult(Intent data) { 
     Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
     imageView.setImageBitmap(thumbnail); 

    } 
    private void onSelectFromGalleryResult(Intent data) { 
     Bitmap bm=null; 
     if (data != null) { 
      try { 
       Uri chosenImageUri = data.getData(); 
       bm = MediaStore.Images.Media.getBitmap(getContentResolver(), chosenImageUri);     
       imageView.setImageBitmap(bm); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
+0

這是我得到的相機圖像的路徑:file:///storage/emulated/0/Pictures/PhysiotherapyProfileImage/Profile.jpg。這是我得到的圖片庫的路徑:file:/// storage/emulated /0/Pictures/PhysiotherapyProfileImage/Profile.jpg ..需要獲取類似於相機的圖庫的文件路徑 – Abhinay

+0

@Abhinay您可以在外部存儲上通過位圖創建一個新的jpg文件。併爲下一步使用該路徑。 文件f =新文件(context.getCacheDir(),文件名); f.createNewFile(); //將位圖轉換爲字節數組 位圖位圖=您的位圖; ByteArrayOutputStream bos = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.PNG,0/*在PNG * /,bos中被忽略); byte [] bitmapdata = bos.toByteArray(); //寫入文件中的字節 FileOutputStream fos = new FileOutputStream(f); fos.write(bitmapdata); fos.flush(); fos.close(); – mandeepsinghn

1
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      File filePhoto = new File(Environment.getExternalStorageDirectory(), "Pic.jpg"); 
      filePhoto.delete(); 
      imageUri = Uri.fromFile(filePhoto); 
      intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 
      startActivityForResult(intent, REQUEST_CODE); 

對於GALLARY

Intent galleryIntent = new Intent(Intent.ACTION_PICK, 
           MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
         startActivityForResult(galleryIntent, RESULT_LOAD_IMG); 

if (requestCode == this.REQUEST_CODE) { 
     Uri selectedImage = imageUri ; 
     this.getContentResolver().notifyChange(selectedImage, null); 
     ContentResolver cr = this.getContentResolver(); 
     Bitmap bitmap; 
     try { 
      bitmap = android.provider.MediaStore.Images.Media 
        .getBitmap(cr,imageUri); 
      imageView.setImageBitmap(bitmap); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      Toast.makeText(this, "Camera is closed", Toast.LENGTH_SHORT).show(); 
     } 
    } else{ 

     try { 
      final Uri imageUri = data.getData(); 
      final InputStream imageStream = getContentResolver().openInputStream(imageUri); 
      bitmap = BitmapFactory.decodeStream(imageStream); 
      imageView.setImageBitmap(bitmap); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      // Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG).show(); 
     } 
    } 
+0

我能夠從庫獲取圖像,但它再次被重定向到相機 – Abhinay

+0

@Abhinay CHEAK RequestCode ...! –

0

這裏完整的源代碼從圖庫中獲取圖庫和從卡馬拉捕獲圖像。這裏選擇裁剪圖像也是可用的.happy編碼使用selectImageOption()方法,即使你想要的按鈕或圖像點擊。

private static final int CAMERA_CODE = 101, GALLERY_CODE = 201, CROPING_CODE = 301; 
    private Uri mImageCaptureUri; 
    private File outPutFile = null; 
    String encodedImage = ""; 
    String path = ""; 



    private void selectImageOption() { 
    final CharSequence[] items = {"Capture Photo", "Choose from Gallery", "Cancel"}; 

    AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    builder.setTitle("Select Photo!"); 
    builder.setItems(items, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int item) { 

      if (items[item].equals("Capture Photo")) { 

       Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp1.jpg"); 
       mImageCaptureUri = Uri.fromFile(f); 
       intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri); 
       startActivityForResult(intent, CAMERA_CODE); 

      } else if (items[item].equals("Choose from Gallery")) { 

       Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(i, GALLERY_CODE); 

      } else if (items[item].equals("Cancel")) { 
       dialog.dismiss(); 
      } 
     } 
    }); 
    builder.show(); 
} 
@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); // data = //file:///mnt/sdcard/temp.jpg 

    if (requestCode == GALLERY_CODE && resultCode == RESULT_OK && null != data) { 

     mImageCaptureUri = data.getData(); // content://media/external/images/media/116 
     System.out.println("Gallery Image URI : " + mImageCaptureUri); 
     //CropingIMG(); 

     onSelectFromGalleryResult(data); 

    } else if (requestCode == CAMERA_CODE && resultCode == RESULT_OK) { 

     System.out.println("Camera Image URI : " + mImageCaptureUri); 
     CropingIMG(); 
     //onCaptureImageResult(data); 

    } else if (requestCode == CROPING_CODE && resultCode == RESULT_OK) { 

     try { 
      if (outPutFile.exists()) { 
       Bitmap photo = Common.decodeFile(outPutFile); 
       ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
       photo.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
       byte[] imageBytes = bytes.toByteArray(); 
       encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT); 

       img_profile_personal_image.setImageBitmap(photo); 
       // img_profile_personal_image.setBackgroundColor(Color.TRANSPARENT); 
      } else { 
       Toast.makeText(context, "Error while save image", Toast.LENGTH_SHORT).show(); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

    private void onCaptureImageResult(Intent data) { 
    Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    thumbnail.compress(Bitmap.CompressFormat.JPEG, 50, bytes); 
    byte[] imageBytes = bytes.toByteArray(); 
    encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT); 

    File destination = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis() + ".jpeg"); 
    FileOutputStream fo; 
    try { 
     destination.createNewFile(); 
     fo = new FileOutputStream(destination); 
     fo.write(bytes.toByteArray()); 
     fo.flush(); 
     fo.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    //Uri tempUri = getImageUri(mContext, thumbnail); 

    path = destination.getAbsolutePath(); 
    if (new File(path).exists()) { 
    //Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG).show(); 
    } 
    ivUserPic.setImageBitmap(thumbnail); 
} 

private void onSelectFromGalleryResult(Intent data) { 

    Bitmap bm = null; 
    if (data != null) { 
     try { 

      bm = Common.getCorrectlyOrientedImage(context, data.getData()); 

      Uri fileUri = data.getData(); 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
       path = getPath(getActivity().getApplicationContext(), fileUri); 
      } 
      File file = new File(path); 

      if (file.exists()) {  
        Toast.makeText(mContext, "File " + file.getAbsolutePath(), Toast.LENGTH_LONG).show(); 
      } 
      Log.d("", "Video URI= " + fileUri); 

      ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
      bm.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
      byte[] imageBytes = bytes.toByteArray(); 
      encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT); 

      ivUserPic.setImageBitmap(bm); 
    } 
} 

    private void CropingIMG() { 
    final ArrayList<CropingOption> cropOptions = new ArrayList<CropingOption>(); 
    Intent intent = new Intent("com.android.camera.action.CROP"); 
    intent.setType("image/*"); 

    List<ResolveInfo> list = context.getPackageManager().queryIntentActivities(intent, 0); 
    int size = list.size(); 
    if (size == 0) { 
     Toast.makeText(context, "Cann't find image croping app", Toast.LENGTH_SHORT).show(); 
     return; 
    } else { 
     intent.setData(mImageCaptureUri); 
     intent.putExtra("outputX", 512); 
     intent.putExtra("outputY", 512); 
     intent.putExtra("aspectX", 1); 
     intent.putExtra("aspectY", 1); 
     intent.putExtra("scale", true); 

     //Create output file here 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(outPutFile)); // "/mnt/sdcard/temp.jpg" 

     if (size == 1) { 
      Intent i = new Intent(intent); 
      ResolveInfo res = (ResolveInfo) list.get(0); 
      i.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); 
      startActivityForResult(i, CROPING_CODE); 
     } else { 
      for (ResolveInfo res : list) { 
       final CropingOption co = new CropingOption(); 

       co.title = getActivity().getPackageManager().getApplicationLabel(res.activityInfo.applicationInfo); 
       co.icon = getActivity().getPackageManager().getApplicationIcon(res.activityInfo.applicationInfo); 
       co.appIntent = new Intent(intent); 
       co.appIntent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); 
       cropOptions.add(co); 
      } 

      CropingOptionAdapter adapter = new CropingOptionAdapter(context, cropOptions); 
      AlertDialog.Builder builder = new AlertDialog.Builder(context); 
      builder.setTitle("Choose Croping App"); 
      builder.setCancelable(false); 
      builder.setAdapter(adapter, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int item) { 
        startActivityForResult(cropOptions.get(item).appIntent, CROPING_CODE); 
       } 
      }); 

      builder.setOnCancelListener(new DialogInterface.OnCancelListener() { 
       @Override 
       public void onCancel(DialogInterface dialog) { 

        if (mImageCaptureUri != null) { 
         context.getContentResolver().delete(mImageCaptureUri, null, null); 
         mImageCaptureUri = null; 
        } 
       } 
      }); 

      AlertDialog alert = builder.create(); 
      alert.show(); 
     } 
    } 
} 

Comman.java

public static Bitmap getCorrectlyOrientedImage(Context context, Uri photoUri) throws IOException { 
    InputStream is = context.getContentResolver().openInputStream(photoUri); 
    BitmapFactory.Options dbo = new BitmapFactory.Options(); 
    dbo.inJustDecodeBounds = true; 
    BitmapFactory.decodeStream(is, null, dbo); 
    is.close(); 

    int rotatedWidth, rotatedHeight; 
    int orientation = getOrientation(context, photoUri); 

    if (orientation == 90 || orientation == 270) { 
     rotatedWidth = dbo.outHeight; 
     rotatedHeight = dbo.outWidth; 
    } else { 
     rotatedWidth = dbo.outWidth; 
     rotatedHeight = dbo.outHeight; 
    } 

    Bitmap srcBitmap; 
    int MAX_IMAGE_WIDTH = 1024; 
    int MAX_IMAGE_HEIGHT = 1024; 
    is = context.getContentResolver().openInputStream(photoUri); 
    if (rotatedWidth > MAX_IMAGE_WIDTH || rotatedHeight > MAX_IMAGE_HEIGHT) { 
     float widthRatio = ((float) rotatedWidth)/((float) MAX_IMAGE_WIDTH); 
     float heightRatio = ((float) rotatedHeight)/((float) MAX_IMAGE_HEIGHT); 
     float maxRatio = Math.max(widthRatio, heightRatio); 

     // Create the bitmap from file 
     BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inSampleSize = (int) maxRatio; 
     srcBitmap = BitmapFactory.decodeStream(is, null, options); 
    } else { 
     srcBitmap = BitmapFactory.decodeStream(is); 
    } 
    is.close(); 

/* 
* if the orientation is not 0 (or -1, which means we don't know), we 
* have to do a rotation. 
*/ 
    if (orientation > 0) { 
     Matrix matrix = new Matrix(); 
     matrix.postRotate(orientation); 

     srcBitmap = Bitmap.createBitmap(srcBitmap, 0, 0, srcBitmap.getWidth(), 
       srcBitmap.getHeight(), matrix, true); 
    } 

    return srcBitmap; 
} 
相關問題