對於攝像頭預覽變形的一些思考

2021-09-19 13:07:12 字數 1447 閱讀 2855

相信對於大多數同學來說,攝像頭預覽並不陌生,乙個典型的功能就是掃碼,只要開發過應用的同學基本都有寫過這個功能。大多數情況下,預覽介面就是整個頁面,這個時候預覽基本不存在變形的情況(或者變形的情況很小,肉眼很難分辨出來),但是,我們的產品總是會提出一些不一樣的需求,比如說乙個固定的頂部掃碼預覽區域加其他內容,這種時候我們該怎麼處理呢?

假設這部手機的解析度為1080×1920,掃碼框大小為1080×600,那麼我們可能會以以下方式去處理這個問題。

1.尋找最佳的解析度

這個也是大部分同學想到的處理方案,那我們就按這個思路去解決這個問題,以下是核心**。

// 相機影象預設解析度,都是橫屏(即寬》高)

if (sizes == null) return;

int w, h;

// 掃瞄框寬高,我們要將寬高設為橫屏模式

if (getresources().getconfiguration().orientation == configuration.orientation_landscape) else

double targetratio = w * 1.0 / h;

// 最佳攝像頭尺寸

camera.size optimalsize = null;

double mindiff = double.max_value;

double aspecttolerance = double.max_value;

int targetheight = h;

// 獲取最佳攝像頭尺寸

for (camera.size size : sizes)

}

以上執行結果我們會得到1080×1080的尺寸,和我們1080×600的預期結果差距還是很大的,然後我們預覽攝像頭可以用su***ceview,textureview等,這裡我就不貼**了。我們會發現預覽的介面變形很嚴重,和我們所想的結果是不一樣的,這個方案可以排除。

2.投機取巧式

這個方案是其他內容的布局覆蓋一部分掃碼預覽區域,比如我們用1方案得到的攝像頭尺寸設定預覽區域為1080×1080,然後其他區域將部分掃碼預覽區域覆蓋,只展示1080×600,所以說是一種投機取巧的方案。這種方案能夠解決預覽區域變形的情況,實現起來也很簡單,有個缺點,就是覆蓋的區域會出現一閃一閃的情況,大多數情況下也能滿足產品的需求,但是如果遇到個別有強迫症的產品,那這種方案也解決不了問題。這裡就不貼具體的**和了,有興趣的同學可以自己去試試。

3.將預覽的畫面進行裁剪

4.從onmeasure方法入手

@override

protected void onmeasure(int widthmeasurespec, int heightmeasurespec)

opencv中一些關於攝像頭的操作

cvcapture結構體 讓程式一幀一幀的讀取,每得到一幀後,指標就轉到下一幀的位置 include include include using namespace std using namespace cv int main cvreleasecapture capture cvdestroyw...

對於工作的一些思考

感覺自從領導讓我管專案以來,一直沒有讓領導很滿意的地方是自己在專案上花的心思太少.很簡單的一些例子就證明了,比如自己雖然是中途接手的專案,然後並沒有仔細檢視招標檔案,沒有針對招標檔案的要求 去核對乙方的一些功能是否完成.其次,對於乙方,我還在心裡上和行動上 做到完成把控住,我不僅要去分析我領導的想法...

對於爬蟲的一些思考

由於專案並不會投入太多的時間,所以穩定性能是最終的。穩定性的可以從以下的維度進行考慮 資料量不多的時候採用單執行緒。異常處理。重試。詳細的日誌。個人覺得資料量少就是在40小時內遍歷全部並且可以爬完的就是小資料量。異常處理主要就是放在請求 時 入庫。而重試主要是用traceback這個庫,它的作用是捕...