新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 獲取Android設(shè)備上的詳細(xì)的攝像頭信息

獲取Android設(shè)備上的詳細(xì)的攝像頭信息

作者: 時(shí)間:2016-10-08 來(lái)源:網(wǎng)絡(luò) 收藏

/* 設(shè)置預(yù)覽照片的大小,此處設(shè)置為全屏 */

WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); // 獲取當(dāng)前屏幕管理器對(duì)象

Display display = wm.getDefaultDisplay(); // 獲取屏幕信息的描述類

parameters.setPreviewSize(display.getWidth(), display.getHeight()); // 設(shè)置

/* 每秒從攝像頭捕獲5幀畫面, */

parameters.setPreviewFrameRate(5);

/* 設(shè)置照片的輸出格式:jpg */

parameters.setPictureFormat(PixelFormat.JPEG);

/* 照片質(zhì)量 */

parameters.set(jpeg-quality, 85);

/* 設(shè)置照片的大小:此處照片大小等于屏幕大小 */

parameters.setPictureSize(display.getWidth(), display.getHeight());

/* 將參數(shù)對(duì)象賦予到 camera 對(duì)象上 */

camera.setParameters(parameters);

preview = true;

}

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

}

/**

* SurfaceView 被銷毀時(shí)釋放掉 攝像頭

*/

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

if(camera != null) {

/* 若攝像頭正在工作,先停止它 */

if(preview) {

camera.stopPreview();

preview = false;

}

camera.release();

}

}

}

/**

* 手機(jī)鍵盤按鍵事件

* 返回 true, 將阻止事件繼續(xù)傳遞,例如搜索鍵,他默認(rèn)會(huì)觸發(fā)和打開(kāi)系統(tǒng)的搜索引擎。返回true后,將不會(huì)觸發(fā)。

*/

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

/*

* event.getRepeatCount() 為重復(fù)按鍵的次數(shù),例如,快速地對(duì)某個(gè)鍵連續(xù)按了兩次,則此值為一,表示重復(fù)了一次。往上可以累推。

* 按鍵只被按了一次,則此值為 0。

* 這有點(diǎn)類似于鼠標(biāo)的 單擊 和 雙擊。

*/

if(camera != null event.getRepeatCount() == 0 ) {

switch (keyCode) {

case KeyEvent.KEYCODE_SEARCH: // 搜索鍵

/* 按下搜索鍵自動(dòng)對(duì)焦 , 如果要關(guān)注它的事件,

* 可以實(shí)現(xiàn) AutoFocusCallback 接口,并實(shí)例化其對(duì)象傳入 */

camera.autoFocus(null);

break;

case KeyEvent.KEYCODE_CAMERA: // 拍照鍵

case KeyEvent.KEYCODE_DPAD_CENTER: // 中間確認(rèn)鍵

/*

* @param shutter : 照片被捕獲之后的回調(diào)對(duì)象

* @param raw : 此回調(diào)對(duì)象可以生產(chǎn)為壓縮的圖片數(shù)據(jù)

* @param jpeg : 此回調(diào)對(duì)象可以產(chǎn)生壓縮后的圖片數(shù)據(jù),其onPictureTaken將被調(diào)用

*/

camera.takePicture(null, null, new TakePictureCallback());

/* 拍完照后回到預(yù)覽狀態(tài),繼續(xù)取景 -- 錯(cuò)誤的方式 */

// camera.startPreview();必須寫在 onPictureTaken 方法內(nèi)部,因?yàn)?takePicture 內(nèi)部是另開(kāi)了一條線程異步的完成保存照片等操作。

// 雖然 takePicture 方法完成了,但是并不代表其內(nèi)部的工作全部完成,也不代表攝像頭以及從上一次“拍照”任務(wù)中工作完畢

break;

default:

break;

}

return true;

}

return super.onKeyDown(keyCode, event);

}

/**

* 處理照片被拍攝之后的事件

*/

private final class TakePictureCallback implements PictureCallback {

@Override

public void onPictureTaken(byte[] data, Camera camera) {

Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

/* 照片將被保存到 SD 卡跟目錄下,文件名為系統(tǒng)時(shí)間,后綴名為.jpg */

File file = new File(Environment.getExternalStorageState(), System.currentTimeMillis() + .jpg);

try {

FileOutputStream fos = new FileOutputStream(file);

/* 位圖格式為JPEG

* 參數(shù)二位 0-100 的數(shù)值,100為最大值,表示無(wú)損壓縮

* 參數(shù)三傳入一個(gè)輸出流對(duì)象,將圖片數(shù)據(jù)輸出到流中

*/

bitmap.compress(CompressFormat.JPEG, 100, fos);

fos.close();

/* 拍完照后回到預(yù)覽狀態(tài),繼續(xù)取景 */

camera.startPreview();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞:

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉