2016-08-04 100 views
0

我試圖裁剪圖像,因爲我們正在做Facebook。我在我的應用程序中使用了這個鏈接:https://github.com/oginotihiro/cropview這對我來說工作正常。但在這裏,當我點擊一個按鈕時,它直接去畫廊和裁剪選定的圖像。而不是我想打開我的設備中的相機,然後單擊形象和我想剪裁。我該怎麼做呢?有人可以幫助我。從相機捕獲圖像,並在android中進行固定裁剪

我試過這個code.But我無法實現。

imageBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       reset(); 
       Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(intent, REQUEST_PICK); 

      } 
     }); 

    doneBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       final ProgressDialog dialog = ProgressDialog.show(StudentDetails.this, null, "Please wait…", true, false); 
       cropView.setVisibility(View.GONE); 
       layout4.setVisibility(View.GONE); 
       resultIv.setVisibility(View.VISIBLE); 
       layout3.setVisibility(View.GONE); 
       layoutUpload.setVisibility(View.VISIBLE); 
       //  editTextName.setVisibility(View.GONE); 
       buttonUpload.setVisibility(View.VISIBLE); 

       new Thread() { 
        public void run() { 
         croppedBitmap = cropView.getOutput(); 

         runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
           // cropped image set 
           resultIv.setImageBitmap(croppedBitmap); 
          } 
         }); 

         Uri destination = Uri.fromFile(new File(getCacheDir(), "cropped")); 
         CropUtil.saveOutput(StudentDetails.this, destination, croppedBitmap, 1); 

         runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
           dialog.dismiss(); 
          } 
         }); 
        } 
       }.start(); 
      } 
     }); 

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

     if (resultCode == RESULT_OK && requestCode == REQUEST_PICK) { 
      filePath = data.getData();   
      cropView.setVisibility(View.VISIBLE); 
      layoutImage.setVisibility(View.VISIBLE); 
      layout3.setVisibility(View.GONE); 
      layout4.setVisibility(View.VISIBLE); 
      textNameVal.setVisibility(View.GONE); 
      text1.setVisibility(View.GONE); 
      buttonUpload.setVisibility(View.GONE); 

      int x=(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics()); 
      int y=(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics());   
      cropView.of(filePath).withAspect(x,y).initialize(StudentDetails.this); 
     } 
     } 
+0

對此有任何解決方案。由於我剛接觸android,因此無法做到這一點。 – Amshu

回答

0

第一步:啓動開畫廊

Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
startActivityForResult(i, RESULT_LOAD_IMAGE); 

第二步:從庫獲取圖像:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { 
      Uri selectedImage = data.getData(); 
      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
      Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null); 
      cursor.moveToFirst(); 
      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      String picturePath = cursor.getString(columnIndex); 
      cursor.close(); 
      ImageView imageView = (ImageView) findViewById(R.id.imgView); 
      imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
     } 
    } 

隨着你的情況,你可以在onActivityResult方法裁剪。 它會幫助你。

+0

謝謝你的答覆。我已經試過這段代碼。但我想從攝像頭捕獲照片。這與我所做的相同,即從gallery中選擇。我想在意圖中使用ACTION_IMAGE_CAPTURE。 – Amshu

0

隨着相機: 第一步:打開相機

/* 
* Capturing Camera Image will lauch camera app requrest image capture 
*/ 
private void captureImage() { 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 

    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

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

第二步:從攝像機獲取圖像。

/** 
* Receiving activity result method will be called after closing the camera 
* */ 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // if the result is capturing Image 
    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(); 
     } 
    } 
} 

第三步:添加權限

<!-- Accessing camera hardware --> 
    <uses-feature android:name="android.hardware.camera" /> 
+0

在這裏我必須在我的問題 – Amshu

+1

的鏈接中實現裁剪選項,您可以編寫一個方法並替換previewCapturedImage()方法。您將收到的數據是位圖位圖= BitmapFactory.decodeFile(fileUri.getPath(), options); – sonnv1368

+0

這裏有什麼選擇? – Amshu