android摄像头代码,Android摄像头
[android]代碼庫(kù)import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Locale;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.os.Bundle;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private CameraView cv;
// 準(zhǔn)備一個(gè)相機(jī)對(duì)象
private Camera mCamera = null;
// 準(zhǔn)備一個(gè)Bitmap對(duì)象
private Bitmap mBitmap = null;
// 準(zhǔn)備一個(gè)保存圖片的PictureCallback對(duì)象
public Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
Log.i("yao", "onPictureTaken");
Toast.makeText(getApplicationContext(), "正在保存……", Toast.LENGTH_LONG)
.show();
// 用BitmapFactory.decodeByteArray()方法可以把相機(jī)傳回的裸數(shù)據(jù)轉(zhuǎn)換成Bitmap對(duì)象
mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
// 接下來(lái)的工作就是把Bitmap保存成一個(gè)存儲(chǔ)卡中的文件
File file = new File("/sdcard/YY"
+ new DateFormat().format("yyyyMMdd_hhmmss",
Calendar.getInstance(Locale.CHINA)) + ".jpg");
try {
file.createNewFile();
BufferedOutputStream os = new BufferedOutputStream(
new FileOutputStream(file));
mBitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
os.flush();
os.close();
Toast.makeText(getApplicationContext(), "圖片保存完畢,在存儲(chǔ)卡的根目錄",
Toast.LENGTH_LONG).show();
} catch (IOException e) {
e.printStackTrace();
}
}
};
// Activity的創(chuàng)建方法
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 窗口去掉標(biāo)題
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 窗口設(shè)置為全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 設(shè)置窗口為半透明
getWindow().setFormat(PixelFormat.TRANSLUCENT);
// 提供一個(gè)幀布局
FrameLayout fl = new FrameLayout(this);
// 創(chuàng)建一個(gè)照相預(yù)覽用的SurfaceView子類(lèi),并放在幀布局的底層
cv = new CameraView(this);
fl.addView(cv);
// 創(chuàng)建一個(gè)文本框添加在幀布局中,我們可以看到,文字自動(dòng)出現(xiàn)在了SurfaceView的前面,由此你可以在預(yù)覽窗口做出各種特殊效果
TextView tv = new TextView(this);
tv.setText("請(qǐng)按\"相機(jī)\"按鈕拍攝");
fl.addView(tv);
// 設(shè)置Activity的根內(nèi)容視圖
setContentView(fl);
}
// 相機(jī)按鍵按下的事件處理方法
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.i("yao", "MainActivity.onKeyDown");
if (keyCode == KeyEvent.KEYCODE_CAMERA) {
if (mCamera != null) {
Log.i("yao", "mCamera.takePicture");
// 當(dāng)按下相機(jī)按鈕時(shí),執(zhí)行相機(jī)對(duì)象的takePicture()方法,該方法有三個(gè)回調(diào)對(duì)象做入?yún)?#xff0c;不需要的時(shí)候可以設(shè)null
mCamera.takePicture(null, null, pictureCallback);
}
}
return cv.onKeyDown(keyCode, event);
}
// 照相視圖
class CameraView extends SurfaceView {
private SurfaceHolder holder = null;
// 構(gòu)造函數(shù)
public CameraView(Context context) {
super(context);
Log.i("yao", "CameraView");
// 操作surface的holder
holder = this.getHolder();
// 創(chuàng)建SurfaceHolder.Callback對(duì)象
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// 停止預(yù)覽
mCamera.stopPreview();
// 釋放相機(jī)資源并置空
mCamera.release();
mCamera = null;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// 當(dāng)預(yù)覽視圖創(chuàng)建的時(shí)候開(kāi)啟相機(jī)
mCamera = Camera.open();
try {
// 設(shè)置預(yù)覽
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
// 釋放相機(jī)資源并置空
mCamera.release();
mCamera = null;
}
}
// 當(dāng)surface視圖數(shù)據(jù)發(fā)生變化時(shí),處理預(yù)覽信息
@Override
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
// 獲得相機(jī)參數(shù)對(duì)象
Camera.Parameters parameters = mCamera.getParameters();
// 設(shè)置格式
parameters.setPictureFormat(PixelFormat.JPEG);
// 設(shè)置預(yù)覽大小,這里我的測(cè)試機(jī)是Milsstone所以設(shè)置的是854x480
parameters.setPreviewSize(854, 480);
// 設(shè)置自動(dòng)對(duì)焦
parameters.setFocusMode("auto");
// 設(shè)置圖片保存時(shí)的分辨率大小
parameters.setPictureSize(2592, 1456);
// 給相機(jī)對(duì)象設(shè)置剛才設(shè)定的參數(shù)
mCamera.setParameters(parameters);
// 開(kāi)始預(yù)覽
mCamera.startPreview();
}
});
// 設(shè)置Push緩沖類(lèi)型,說(shuō)明surface數(shù)據(jù)由其他來(lái)源提供,而不是用自己的Canvas來(lái)繪圖,在這里是由攝像頭來(lái)提供數(shù)據(jù)
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
}
}
----------------------------------------------------------------
總結(jié)
以上是生活随笔為你收集整理的android摄像头代码,Android摄像头的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android的动态注册,Android
- 下一篇: android studio 写文件,在