-1

Ich muss ein Foto von Galerie und Kamera machen. Just wie fragt die Option der Kamera und gallery.Zurzeit kann ich ein Bild erfassen und in der Bildansicht speichern. Aber nicht in der Lage es nimmt wieder zur Kamera, nachdem sie von Galerie KommissionierungNehmen Sie Foto von Galerie und Kamera android

Das ist mein Code, ist

@BindView (R.id.selImage) Taste selImage hochladen aus der Galerie; @Nullable @BindView (R.id.uProfileImage) ImageView uProfileImage; privat 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(); 
    } 
} 

protected void onActivityResult (int requestCode, int Result, Intent-Daten)

{

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(); 
     } 
    } 
} 

Bitte empfehlen Sie mir, wie Bild aus der Galerie hinzufügen und in meinem Code zu speichern

Antwort

1

Sie können diesen Code versuchen.

+0

Dies ist der Pfad, den ich bekomme für die Kamera Bild: file: ///storage/emulated/0/Pictures/PhysiotherapyProfileImage/Profile.jpg.Dies ist der Pfad, den ich für Galerie Bild: Datei: /// Speicher/emuliert bekommen /0/Pictures/PhysiotherapyProfileImage/Profile.jpg .. müssen Dateipfad für Galerie ähnlich der Kamera – Abhinay

+0

@Abhinay können Sie eine neue JPG-Datei aus Bitmap auf externen Speicher erstellen. Und diesen Pfad für den nächsten Schritt verwenden. Datei f = neue Datei (context.getCacheDir(), Dateiname); f.createNewFile(); // Bitmap in Byte-Array konvertieren Bitmap Bitmap = Ihre Bitmap; ByteArrayOutputStream bos = neues ByteArrayOutputStream(); bitmap.compress (CompressFormat.PNG, 0/* ignoriert für PNG * /, bos); byte [] bitmapdata = bos.toByteArray(); // schreibe die Bytes in die Datei FileOutputStream fos = new FileOutputStream (f); fos.write (Bitmapdaten); 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); 

Für Gallary

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

Nach

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

Ich kann das Bild aus der Galerie bekommen, aber es wird Umleitung wieder zur Kamera – Abhinay

+0

@Abhinay cheak RequestCode ... !! –

0

Hier der vollständige Quellcode von Bild holen aus der Galerie und erfassen Bild von Camara. Hier ist auch Option für das Zuschneiden Bild ist verfügbar .happy Coding verwenden selectImageOption() -Methode, in dem Button oder Bild klicken, sogar Sie wollen.

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; 
} 
Verwandte Themen