呼叫 android 自身裁剪功能
一、視訊抓拍
1、基本類
Android 框架通過 Camera API 或者 camer Intent 的方式,支援 捕捉影象和視訊 。相關的大類主要有以下幾個:
(1) Camera 攝像時候必須呼叫到的類;
(2)SurfaceView 提供攝像頭預覽。
(3)MediaRecorder 錄影時候用到的類;
(4)Intent 如果不通過 Camera 物件來操控攝像頭,那麼用兩個intent 動作 MediaStore.ACTION_IMAGE_CAPTURE or MediaStore.ACTION_VIDEO_CAPTURE 也能夠實現攝影和錄影。
o MediaStore.ACTION_IMAGE_CAPTURE —— 向內建攝像頭程式請求影象的意圖活動型別。
o MediaStore.ACTION_VIDEO_CAPTURE —— 向內建攝像頭程式請求視訊的意圖活動型別。
2、 Manifest 宣告
在使用Camera API前,必須做出使用 Camera 硬體的宣告。主要有下面 點:
(1) Camera 允許:(注意,如果是通過intent 意圖來操控的,則不需要下面宣告)
<uses-permission android:name="android.permission.CAMERA" />
(2)Camera 特徵,比如說名字
<uses-feature android:name="android.hardware.camera" />
(3)如果你要在SD卡中儲存照片和視訊,那麼就得開啟SD卡許可權
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
(4)錄音許可權
<uses-permission android:name="android.permission.RECORD_AUDIO" />
(5)如果希望在照片中插入GPS當地資訊,還得開啟GPS
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
3、使用方法
使用攝像頭的方法有兩種:
一種是編寫程式碼比較少的,快速使用攝像頭的意圖Intent 方法;
另外一種就是 自動外觀的攝像頭使用者介面,要求編寫更多的程式碼。
4、使用Intent 快速應用攝像頭:使用預設配置拍攝並儲存
二、圖片自由裁剪
關鍵程式碼如下:
public void imageCut(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
//開啟裁剪功能
intent.putExtra("crop", "true");
//設定寬高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//設定裁剪圖片寬高
intent.putExtra("outputX", 100);
intent.putExtra("outputY", 100);
//要求返回資料
intent.putExtra("return-data", true);
startActivityForResult(intent, 100);
}
返回資料後直接在onActivityResult 裡對返回的圖片資料進行顯示就行了,這裡由於剪下後的圖片較小,個人覺得應該不用考慮OOM的問題,問題是,在呼叫自帶的裁剪功能的時候,由於沒看原始碼,所以不知道在調整裁剪框的時候,顯示的那副圖片有沒有進行壓縮,如果沒有進行壓縮,那麼當圖片很大的時候,載入起來就很容易出現OOM了,明顯對此由於是呼叫官方的API,我沒有方法去解決它。唯一的辦法就是不用它,而是自己去寫一個,就可以避免這個問題。利用如下的程式碼進行壓縮,很好地避免OOM問題。