2013-03-22 89 views
8

我們一直在構建一個自定義Android攝像頭活動,其中一個矩形是 疊加在攝像頭預覽中,當拍攝照片時(在 按下按鈕),我們要裁剪對應的矩形區域 的最終圖像。問題是我們還沒有想出如何將預覽屏幕映射到最終圖像。Android攝像頭預覽圖到最終圖片

我們已經嘗試下面的公式,但只在某些情況下工作:

令x和y是在相機預覽所示的矩形作爲 的左上角的座標。

讓preview_width和preview_height爲相機預覽的寬度和高度 預覽。這些都是使用getBestPreviewSize()函數得到的,該函數通過支持的Preview尺寸循環 並選擇較大的一個。 讓我們假設他們是1280和720

讓picture_width和picture_height是最終 圖片的寬度和高度由相機所支持的。對於我們的目的,假設這是1632 * 1224(在索尼愛立信XPERIA上這對應於2MP)。

我們想要找到x_map,y_map,它們是最終圖像的裁剪矩形的x和y。

然後通過類比的規則,我們使用公式爲:

x_map = picture_width * X/preview_width; y_map = picture_height * y/preview_height;

但是,這似乎並不適用於所有情況。我們發現,當手機的屏幕尺寸與預覽尺寸相似時,這個 公式幾乎可以工作(近似,誤差很小)。

但對於其他情況下,如索尼XPERIA手機,屏幕尺寸是:寬度:480 和高度:854,公式失敗。

例如,對於X = 50,則x_map = 1632 *一千二百八十零分之五十= 63.75 但是這個數字,如由矩形區域從最終 圖像裁剪,並沒有真正對應於矩形在預覽區域。它 是離開。我們的公式沒有考慮屏幕尺寸, 雖然通過修改它來考慮它們,但沒有 產生了任何理想的結果。

我們懷疑預覽大小,不知何故最終圖像 之間的映射考慮到了屏幕的尺寸,但還沒有想出究竟如何, 因爲有它,後廣泛尋找 答案沒有文檔網絡無關緊要。我們認爲在應用類比法則之前,我們需要考慮 的某個比例因子和縱橫比,以使公式正常工作。

你知道上述的正確公式嗎?

回答

1

首先,通過獲取返回Camera.getSupportedPictureSizes最大畫面尺寸 - 這是你的相機的原始分辨率,從中可以判斷原始寬高比。具有不同縱橫比的任何圖片的大小或預覽大小將根據`Matrix.ScaleToFit.CENTER」被裁剪。

另請參閱: https://stackoverflow.com/a/18159351/994834