Android 開發 相機那點事兒

2021-07-11 10:07:03 字數 3165 閱讀 4066

本文件只涉及到使用手機的攝像頭裝置自行開發照相軟體,所以,直接使用應用程式提供的android攝像頭api。那麼接下來我們就來**一下如何使用android硬體裝置——攝像頭。

step 1:工欲善其事必先利其器,進行開發前我們先來仔細看一看android攝像頭的api都為我們提供了哪些類和介面:

描述

camrea

camera.parameters

相機的服務設定。

su***ceview

用來展示攝像頭拍攝的實時預覽影象,控制預覽介面

接下來我們來看一看camera類都為我們提供了那些主要的方法:

f.no

描述

1

open( )

開啟預設的相機

2

release( )

它被用來釋放在鏡頭鎖定,所以其他應用程式可以訪問它

3

setprameters(  )

它是用來設定相機引數,包括前後攝像頭,閃光燈模式、聚焦模式、預覽和拍照尺寸等。

4

setpreviewdisplay(su***ceholder holder)

它是用來設定預覽拍照,繫結繪製預覽影象的su***ce

5

startpreview( )

它是用來開啟相機的預覽給使用者

6

stoppreview( )

它是用來阻止相機的預覽給使用者

7

takepicture(camera.shuttercallback shutter, camera.picturecallback raw, camera.picturecallback jpeg)

它被用來使能/禁止影象拍攝的預設快門聲音

更多方法介紹請參見文件

當然camera.parameters類中有一些必要的屬性也是要我們進行設定的:

f.no

描述

1

setpicturesize(int width,int height)

設定的尺寸。

setpreviewsize(int width,int height)

設定預覽**的尺寸。

setrotation(int angle)

集度相對於相機的方向順時針旋轉角度。

更多方法介紹請參見文件

su***ceholder.callback介面是用於處理預覽的事件,需實現如下三個方法:

i.no

描述

su***cecreated(su***ceholder holder):

預覽介面建立時呼叫,每次介面改變後都會重新建立,需要獲取相機資源並設定su***ceholder

su***cechanged(su***ceholderholder, int format, int width, int height):

預覽介面發生變化是呼叫,每次介面發生變化之後需要重新啟動預覽

su***cechanged(su***ceholderholder, int format, int width, int height):

預覽銷毀時呼叫,停止預覽,釋放相機資源

以上準備工作理解了之後,接下來的工作就很簡單了,只要按照如下步驟就可以輕鬆實現乙個簡單的android手機相機應用程式的編寫:

(1)   通過camera.open()來獲取camera例項;

(2)   呼叫camera的getparameters()方法獲取拍照引數。該方法返回乙個camera.parameters物件;

(3)   呼叫camera.parameters物件方法設定拍照引數;

(4)   呼叫camera的setparameters(),並將camera.parameters物件作為引數傳入,這樣即可對相機的拍照引數進行控制;

(5)   呼叫camera的startpreview()方法開始預覽取景,在預覽取景之前需要呼叫camera的setperviewdisplay(su***ceholder holder)方法設定使用哪個su***ceview來顯示取景;

(6)   呼叫camera的takepicture()方法進行拍照;

(7)   呼叫camera的stoppreview()結束取景預覽,並呼叫release()方法釋放資源;

(8)   儲存到本地;

step 2:實際案例分析

1. 開發案例1——簡單的相機實現

2. 開發案例2——可以儲存的相機

3. 開發案例3——儲存指定區域的的相機

4. 開發案例4——整體優化設計

系列博文都寫的非常好

游標那點事兒

兩種迴圈跳出方法 1 稍顯複雜點 create procedure dbo.usp cralltables client id varchar 256 asdeclare table name varchar 50 set nocount on declare t name cur cursor l...

imu那點事兒

一.對於bosch晶元的總結 offset 是指sensor的零偏。datasheet 裡邊描述的是在不同的情況下offset 的spec.offa,int 表示sensor 出廠時最初的offset spec,是component level offa,board 表示sensor 在貼到pcb ...

Spring MVC那點事兒

1 spring mvc的啟動原理?spring mvc是基於ioc容器的,因此需要先建立ioc容器,才能建立對應的spring mvc執行環境。ioc容器是通過contextloaderlistener建立的,這個類通過servletcontext建立。在springmvc中,最核心的思想其實就是...