2016-03-31 79 views
2

正在創建在android系統的文檔掃描應用程序,我使用OpenCV的和掃描庫在我的項目要裁切的矩形視圖內的圖像,我創建了攝像頭視圖中使用的drawRect一個矩形,現在我需要僅捕獲該矩形部分內的圖像並將其顯示在另一個活動中。需要捕獲使用相機的Android

有問題的圖像:

enter image description here

+0

ü可以從相機拍攝的正常圖像和後來在畫布繪製裁剪是在外部矩形 –

+0

@Preethi饒的部分,但實際上我需要的圖像通過在矩形視圖中如何可以通過該圖像部分只有 –

+0

我不知道,從我所看到的u能畫出一個矩形在畫布上,並在相同的畫布和作物繪製圖像中不需要的部分 –

回答

2

對於我來說,我將採取整幅圖像,然後裁剪。 你的問題:「我怎麼知道圖像的哪一部分在矩形部分內,然後只有我能通過它,希望你能理解」。我的答案是可以使用整個圖像尺寸和相機顯示屏幕尺寸的相對比例。然後你會知道要裁剪哪一部分矩形。

這是代碼示例。 請注意,您需要填寫一些代碼才能將文件保存爲jpg格式,並在裁剪後保存。

// 1. Save your bitmap to file 
    public class MyPictureCallback implements Camera.PictureCallback { 
    @Override 
    public void onPictureTaken(byte[] data, Camera camera) { 

     try { 
      //mPictureFile is a file to save the captured image 
      FileOutputStream fos = new FileOutputStream(mPictureFile); 
      fos.write(data); 
      fos.close(); 

     } catch (FileNotFoundException e) { 
      Log.d(TAG, "File not found: " + e.getMessage()); 
     } 
    } 
    } 

    // Somewhere in your code 
    // 2.1 Load bitmap from your .jpg file    
    Bitmap bitmap = BitmapFactory.decodeFile(path+"/mPictureFile_name.jpg"); 

    // 2.2 Rotate the bitmap to be the same as display, if need. 
    ... Add some bitmap rotate code 

    // 2.3 Size of rotated bitmap 
    int bitWidth = bitmap.getWidth(); 
    int bitHeight = bitmap.getHeight(); 

    // 3. Size of camera preview on screen 
    int preWidth = preview.getWidth(); 
    int preHeight = preview.getHeight(); 

    // 4. Scale it. 
    // Assume you draw Rect as "canvas.drawRect(60, 50, 210, 297, paint);" command 
    int startx = 60 * bitWidth/preWidth; 
    int starty = 50 * bitHeight/preHeight; 
    int endx = 210 * bitWidth/preWidth; 
    int endy = 297 * bitHeight/preHeight; 

    // 5. Crop image 
    Bitmap blueArea = Bitmap.createBitmap(bitmap, startx, starty, endx, endy); 

    // 6. Save Crop bitmap to file 
+0

可以給我一些鏈接或代碼片段,以低於 –

+0

@ M Balajivaishnav。讓我看看你的代碼在camara視圖上繪製矩形。我將添加必要的部分使其工作。 –

+0

好嗎請稍候 –

-1

這會爲你工作:How to programmatically take a screenshot in Android?

確保在Bitmap.createBitmap(V1通過視圖(V1中的代碼示例的情況下)。 getDrawingCache())是一個視圖組,其中包含要發送到第二個活動的圖像

編輯: 我不認爲您的預期流程是可行的。據我所知,相機意圖不需要允許繪製這樣一個矩形的參數(儘管我可能是錯的)。

取而代之的是,我建議您拍攝一張照片,然後使用庫(例如這個)(https://github.com/ArthurHub/Android-Image-Cropper)或編程方式編輯它,如上所述。

+0

拍屏幕截圖吧?但我需要從相機捕獲,請參閱鏈接 –