您好,登錄后才能下訂單哦!
這篇“Android中怎么使用照相機”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Android中怎么使用照相機”文章吧。
Android 照相機的實例應用
SurfaceHolder.Callback
public class MyCameraDemo extends Activity { private SurfaceView surface = null ; private Button but = null ; private SurfaceHolder holder = null ; private Camera cam = null ; private boolean previewRunning = true ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.main); this.but = (Button) super.findViewById(R.id.but) ; this.surface = (SurfaceView) super.findViewById(R.id.surface) ; this.holder = this.surface.getHolder() ; this.holder.addCallback(new MySurfaceViewCallback()) ; //設置緩沖類型 this.holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS) ; //設置分辨率 this.holder.setFixedSize(600, 350); this.but.setOnClickListener(new OnClickListenerImpl()) ; } private class OnClickListenerImpl implements OnClickListener { @Override public void onClick(View v) { if(MyCameraDemo.this.cam != null) { //自動對焦 MyCameraDemo.this.cam.autoFocus(new AutoFocusCallbackImpl()) ; } } } private class MySurfaceViewCallback implements SurfaceHolder.Callback { //當預覽界面格式大小改變時,調用 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } //初次實例化界面調用 public void surfaceCreated(SurfaceHolder holder) { MyCameraDemo.this.cam = Camera.open(0) ; // 取得第一個攝像頭 //窗口服務 WindowManager manager = (WindowManager) MyCameraDemo.this .getSystemService(Context.WINDOW_SERVICE); //取得display顯示對象 Display display = manager.getDefaultDisplay() ; //照相機參數 Parameters param = MyCameraDemo.this.cam.getParameters() ; //將照相機預覽大小設置為display大小 param.setPreviewSize(display.getWidth(), display.getHeight()) ; param.setPreviewFrameRate(5) ; // 一秒5幀 param.setPictureFormat(PixelFormat.JPEG) ; // 圖片形式 param.set("jpen-quality", 80) ;//圖片質量,最高100 MyCameraDemo.this.cam.setParameters(param) ; try { MyCameraDemo.this.cam.setPreviewDisplay(MyCameraDemo.this.holder) ; } catch (IOException e) { } MyCameraDemo.this.cam.startPreview() ; // 進行預覽 MyCameraDemo.this.previewRunning = true ; // 已經開始預覽 } @Override public void surfaceDestroyed(SurfaceHolder holder) { if(MyCameraDemo.this.cam != null) { if(MyCameraDemo.this.previewRunning) { MyCameraDemo.this.cam.stopPreview() ; // 停止預覽 MyCameraDemo.this.previewRunning = false ; } MyCameraDemo.this.cam.release() ; } } } private class AutoFocusCallbackImpl implements AutoFocusCallback { @Override public void onAutoFocus(boolean success, Camera camera) { if(success) { // 成功 MyCameraDemo.this.cam.takePicture(sc, pc, jpgcall) ; } } } private PictureCallback jpgcall = new PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { // 保存圖片的操作 Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length); String fileName = Environment.getExternalStorageDirectory() .toString() + File.separator + "mldnphoto" + File.separator + "MLDN_" + System.currentTimeMillis() + ".jpg"; File file = new File(fileName) ; if (!file.getParentFile().exists()) { file.getParentFile().mkdirs() ; // 創建文件夾 } try { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)) ; bmp.compress(Bitmap.CompressFormat.JPEG, 80, bos) ; // 向緩沖區之中壓縮圖片 bos.flush() ; bos.close() ; Toast.makeText(MyCameraDemo.this, "拍照成功,照片已保存在" + fileName + "文件之中!", Toast.LENGTH_SHORT) .show(); } catch (Exception e) { Toast.makeText(MyCameraDemo.this, "拍照失敗!", Toast.LENGTH_SHORT) .show(); } MyCameraDemo.this.cam.stopPreview() ; MyCameraDemo.this.cam.startPreview() ; } } ; private ShutterCallback sc = new ShutterCallback(){ @Override public void onShutter() { // 按下快門之后進行的操作 } } ; private PictureCallback pc = new PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { } } ; }
主布局函數
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/but" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="照相" /> <SurfaceView android:id="@+id/surface" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>
以上就是關于“Android中怎么使用照相機”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。