2017-01-28 115 views
0

我正在拍攝來自我的原生Android手機相機的照片!但我想要的是調整拍攝的照片,然後保存。Android相機意圖捕獲照片並在保存前調整照片大小

我一直在努力爲:

public void takePhoto() { 
     Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
     File folder = new File(Environment.getExternalStorageDirectory() + "/PhotoBox"); 

     if (!folder.exists()) { 
      folder.mkdir(); 
     } 
     final Calendar c = Calendar.getInstance(); 
     String new_Date = c.get(Calendar.DAY_OF_MONTH) + "-" + ((c.get(Calendar.MONTH)) + 1) + "-" + c.get(Calendar.YEAR) + " " + c.get(Calendar.HOUR) + "-" + c.get(Calendar.MINUTE) + "-" + c.get(Calendar.SECOND); 
     path = String.format(Environment.getExternalStorageDirectory() + "/" + "PhotoBox" + "/%s.png", "Product(" + new_Date + ")"); 

     File photo = new File(path); 

     intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); 
     xPath = path; 
     startActivityForResult(intent, 2); 
    } 

我知道我的捕捉圖像被保存後的照片。我可以通過創建縮放的位圖來調整圖像大小!但在Camera Intent的情況下,我得到的只是Uri的拍攝圖像,然後我保存了它。

但我想知道

我如何可以調整所拍攝的照片由Android相機意圖和 THEN SAVE?

+0

你的意思是調整大小,具體比例是什麼?像720 * 720?什麼 ? – W4R10CK

+1

不可能。使用這種相機意圖總是首先保存圖像。改用Camera類。 – greenapps

+0

我只需要調整圖像的大小,如200x200 ...任何 –

回答

2

您正在使用EXTRA_OUTPUT。這要求相機應用程序將圖像保存到該位置。在你的情況下,你將它指向一個文件,所以相機應用程序將圖像保存到該文件。在將控制權交還給您之前,它會這樣做,因此您無法在此之前調整圖像大小。

你的選擇是:

  • 只是調整圖像大小之後。

  • 從您的Intent中刪除EXTRA_OUTPUT。然後,相機應用程序不應將圖像保存到文件,而應通過在onActivityResult()中交給您的Intent中的"data"額外部分爲您提供縮略圖大小的圖像。這個縮略圖可能根本不需要調整大小;即使這樣做,您可以在將其保存到某個位置之前調整它的大小。

  • 執行ContentProvider,它將從相機應用程序接收圖像,然後在保存之前調整它的大小。這是不太可能的,因爲你不可能有足夠的堆空間來處理全尺寸的圖像。

+0

',而不是將圖像保存到文件,相機應用程序應該給你一個縮略圖大小的圖像。它會同時做到這一點。 – greenapps

+0

@greenapps:這完全取決於相機應用程序。一個寫得好的相機應用程序將只提供縮略圖大小的圖像。唉,在成千上萬的Android設備模型上預裝了數百個相機應用程序,並不是所有的開發人員都看過文檔。 – CommonsWare

+0

值得依賴Intent的「數據」而不是「extra_output」?由於AFAIK的內容在圖像的分辨率和大小方面有很大的差異?如果我錯了,請糾正我。 – Hemang