日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android之相机开发

發(fā)布時間:2023/12/1 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android之相机开发 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?http://blog.csdn.net/jason0539/article/details/10125017

android之相機開發(fā)?

分類:?android 基礎知識 Android

在android中應用相機功能,一般有兩種:一種是直接調用系統(tǒng)相機,一種自己寫的相機。
我將分別演示兩種方式的使用:

第一種:是使用Intent跳轉到系統(tǒng)相機,action為:android.media.action.STILL_IMAGE_CAMERA
關鍵代碼:

[java]?view plaincopyprint?
  • Intent?intent?=?new?Intent();?//調用照相機??????
  • intent.setAction("android.media.action.STILL_IMAGE_CAMERA");??????
  • startActivity(intent);??????
  • 例子:

    [java]?view plaincopyprint?
  • import?android.app.Activity;??????
  • import?android.content.Intent;??????
  • import?android.os.Bundle;??????
  • public?class?CameraTest_2?extends?Activity?{??????
  • ????/**?Called?when?the?activity?is?first?created.?*/??????
  • ????@Override??????
  • ????public?void?onCreate(Bundle?savedInstanceState)?{??????
  • ????????super.onCreate(savedInstanceState);??????
  • ????????setContentView(R.layout.main);??????
  • ????????Intent?intent?=?new?Intent();?//調用照相機??????
  • ?????????intent.setAction("android.media.action.STILL_IMAGE_CAMERA");???????
  • ????????startActivity(intent);??????
  • ????}??????
  • }??????
  • 想要測試的,可以直接新建一個項目,并且把主activity的代碼換成上面的,然后運行,我測試了一下,上面這個代碼并不
    需要權限,畢竟只是調用系統(tǒng)自帶的程序。
    當然網(wǎng)上還有一些其他相關的調用方法,只要設置對了action,那么系統(tǒng)就會調用系統(tǒng)自帶的相機.


    第二種:
    (1)首先我們要自己創(chuàng)建一個照相界面,必須考慮用什么控件顯示照相機中的預覽效果,顯然android已經幫我們做好了選擇,那就是SurfaceView

    控制SurfaceView需要一個surfaceHolder,他是系統(tǒng)提供的一個用來設置SurfaceView的一個對象,可以通過surfaceView.getHolder()這個方法來獲得.

    Camera提供一個setPreviewDisplay(SurfaceHolder)的方法來連接surfaceHolder,并通過他來控制surfaceView.

    而我們則使用android的Camera類提供了startPreview()和stopPreview()來開啟和關閉預覽.
    關系如下:
    Camera -- -->SurfaceHolder------>SurfaceView.

    (2)知道怎么預覽了,當然也要知道怎么開啟相機.Camera.open()這是個靜態(tài)方法,如果相機沒有別人用著,則會返回一個 相機引用,如果被人用著,則會拋出異常。很奇怪的是,這個方法,不能隨便放,如放在構造方法或者onCreate()方法中,都會照成沒有預覽效果.

    (3)
    SurfaceHolder.Callback,這是個holder用來顯示surfaceView 數(shù)據(jù)的接口,他分別必須實現(xiàn)3個方法
    surfaceCreated()這個方法是surface 被創(chuàng)建后調用的
    surfaceChanged()這個方法是當surfaceView發(fā)生改變后調用的
    surfaceDestroyed()這個是當surfaceView銷毀時調用的.
    surfaceHolde通過addCallBack()方法將響應的接口綁定到他身上.
    surfaceHolder還必須設定一個setType()方法,查看api的時候,發(fā)現(xiàn)這個方法已經過時,但是不寫,又會報錯

    (4)
    我用以上知識寫了一個MySurfaceView類,他繼承于SurfaceView,并在里面實現(xiàn)了照相機的預覽功能.這個我覺得最簡單的照相機預覽代碼:
    MySurfaceView.java:

    [java]?view plaincopyprint?
  • import?java.io.IOException;??????
  • import?android.content.Context;??????
  • import?android.graphics.PixelFormat;??????
  • import?android.hardware.Camera;??????
  • import?android.util.Log;??????
  • import?android.view.SurfaceHolder;??????
  • import?android.view.SurfaceView;??????
  • public?class?MySurfaceView?extends?SurfaceView?implements?SurfaceHolder.Callback{??????
  • ????SurfaceHolder?holder;??????
  • ????Camera?myCamera;??????
  • ????public?MySurfaceView(Context?context)??????
  • ????{??????
  • ????????super(context);??????
  • ????????holder?=?getHolder();//獲得surfaceHolder引用??????
  • ?????????holder.addCallback(this);??????
  • ????????holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//設置類型????????
  • ????}??
  • ????@Override??????
  • ????public?void?surfaceCreated(SurfaceHolder?holder)?{??????
  • ????????//?TODO?Auto-generated?method?stub??????
  • ????????if(myCamera?==?null)??????
  • ????????{??????
  • ????????????myCamera?=?Camera.open();//開啟相機,不能放在構造函數(shù)中,不然不會顯示畫面.??????
  • ????????????try?{??????
  • ????????????????myCamera.setPreviewDisplay(holder);??????
  • ????????????}?catch?(IOException?e)?{??????
  • ????????????????//?TODO?Auto-generated?catch?block??????
  • ????????????????e.printStackTrace();??????
  • ????????????}??????
  • ????????}?????????????
  • ????}??????
  • ????@Override??????
  • ????public?void?surfaceChanged(SurfaceHolder?holder,?int?format,?int?width,??????
  • ????????????int?height)?{??????
  • ????????myCamera.startPreview();??????????????
  • ????}??????
  • ????????@Override??????
  • ????public?void?surfaceDestroyed(SurfaceHolder?holder)?{??????
  • ????????//?TODO?Auto-generated?method?stub??????
  • ????????myCamera.stopPreview();//停止預覽??????
  • ?????????myCamera.release();//釋放相機資源??????
  • ?????????myCamera?=?null;??????
  • ????????Log.d("ddd",?"4");????????
  • ????}??????
  • }??????
  • 主activity代碼:

    [java]?view plaincopyprint?
  • import?android.app.Activity;??????
  • import?android.os.Bundle;??????
  • import?android.view.View;??????
  • import?android.view.View.OnClickListener;??????
  • public?class?CameraTest_3?extends?Activity??{??????
  • ????/**?Called?when?the?activity?is?first?created.?*/??????
  • ????MySurfaceView?mySurface;??????
  • ????@Override??????
  • ????public?void?onCreate(Bundle?savedInstanceState)?{??????
  • ????????super.onCreate(savedInstanceState);??????
  • ????????mySurface?=?new?MySurfaceView(this);??????
  • ????????setContentView(mySurface);??????
  • ????}??????
  • }??????
  • 而且必須給應用添加權限:

    [html]?view plaincopyprint?
  • <uses-permission?android:name="android.permission.CAMERA"></uses-permission>??
  • (5)能夠預覽了,接下來就是拍照了,拍照用到了一個camera.tackPiture()這個方法,這個方法,有三個參數(shù)分別是
    ShutterCallBack shutter,PictureCallBack raw,PictureCallBack jpeg.
    下面是對他們的實現(xiàn)

    [java]?view plaincopyprint?
  • private?ShutterCallback?shutter?=?new?ShutterCallback()?{??????
  • ??????????
  • ????@Override??????
  • ????public?void?onShutter()?{??????
  • ????????//?TODO?Auto-generated?method?stub??????
  • ????????Log.d("ddd",?"shutter");??????????
  • ????}??????
  • };??????
  • private?PictureCallback?raw?=?new?PictureCallback()?{??????
  • ??????????
  • ????@Override??????
  • ????public?void?onPictureTaken(byte[]?data,?Camera?camera)?{??????
  • ????????//?TODO?Auto-generated?method?stub??????
  • ????????Log.d("ddd",?"raw");????????
  • ????}??????
  • };??????
  • private?PictureCallback?jpeg?=?new?PictureCallback()?{??????
  • ??????????
  • ????@Override??????
  • ????public?void?onPictureTaken(byte[]?data,?Camera?camera)?{??????
  • ????????//?TODO?Auto-generated?method?stub??????
  • ????????Log.d("ddd","jpeg");????????
  • ????}??????
  • };??????
  • 當開始拍照時,會依次調用shutter的onShutter()方法,raw的onPictureTaken方法,jpeg的onPictureTaken方法.
    三個參數(shù)的作用是shutter--拍照瞬間調用,raw--獲得沒有壓縮過的圖片數(shù)據(jù),jpeg---返回jpeg的圖片數(shù)據(jù)
    當你不需要對照片進行處理,可以直接用null代替.
    注意,當調用camera.takePiture方法后,camera關閉了預覽,這時需要調用startPreview()來重新開啟預覽。


    我用以上知識,加到上面的那個例子,就形成了下面的代碼:
    MySurfaceView.java:

    [java]?view plaincopyprint?
  • package?jason.camera;??????
  • import?java.io.IOException;??????
  • import?android.content.Context;??????
  • import?android.graphics.PixelFormat;??????
  • import?android.hardware.Camera;??????
  • import?android.hardware.Camera.PictureCallback;??????
  • import?android.hardware.Camera.ShutterCallback;??????
  • import?android.util.Log;??????
  • import?android.view.SurfaceHolder;??????
  • import?android.view.SurfaceView;??????
  • public?class?MySurfaceView?extends?SurfaceView?implements?SurfaceHolder.Callback{??????
  • ????SurfaceHolder?holder;??????
  • ????Camera?myCamera;??????
  • ????private?ShutterCallback?shutter?=?new?ShutterCallback()?{??????
  • ??????????????
  • ????????@Override??????
  • ????????public?void?onShutter()?{??????
  • ????????????//?TODO?Auto-generated?method?stub??????
  • ????????????Log.d("ddd",?"shutter");??????
  • ??????????????????
  • ????????}??????
  • ????};??????
  • ????private?PictureCallback?raw?=?new?PictureCallback()?{??????
  • ??????????????
  • ????????@Override??????
  • ????????public?void?onPictureTaken(byte[]?data,?Camera?camera)?{??????
  • ????????????//?TODO?Auto-generated?method?stub??????
  • ????????????Log.d("ddd",?"raw");??????
  • ??????????????????
  • ????????}??????
  • ????};??????
  • ????private?PictureCallback?jpeg?=?new?PictureCallback()?{??????
  • ??????????????
  • ????????@Override??????
  • ????????public?void?onPictureTaken(byte[]?data,?Camera?camera)?{??????
  • ????????????//?TODO?Auto-generated?method?stub??????
  • ????????????Log.d("ddd","jpeg");??????
  • ??????????????????
  • ????????}??????
  • ????};??????
  • ????public?MySurfaceView(Context?context)??????
  • ????{??????
  • ????????super(context);??????
  • ????????holder?=?getHolder();//獲得surfaceHolder引用??????
  • ?????????holder.addCallback(this);??????
  • ????????holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//設置類型????????
  • ????}??????
  • ????public?void?tackPicture()??????
  • ????{??????
  • ????????myCamera.takePicture(null,null,null);??????
  • ????}??????
  • ????public?void?voerTack()??????
  • ????{??????
  • ????????myCamera.startPreview();??????
  • ????}??????
  • ????@Override??????
  • ????public?void?surfaceChanged(SurfaceHolder?holder,?int?format,?int?width,??????
  • ????????????int?height)?{??????
  • ????????myCamera.startPreview();??????????????
  • ????}??????
  • ????@Override??????
  • ????public?void?surfaceCreated(SurfaceHolder?holder)?{??????
  • ????????//?TODO?Auto-generated?method?stub??????
  • ????????if(myCamera?==?null)??????
  • ????????{??????
  • ????????????myCamera?=?Camera.open();//開啟相機,不能放在構造函數(shù)中,不然不會顯示畫面.??????
  • ????????????try?{??????
  • ????????????????myCamera.setPreviewDisplay(holder);??????
  • ????????????}?catch?(IOException?e)?{??????
  • ????????????????//?TODO?Auto-generated?catch?block??????
  • ????????????????e.printStackTrace();??????
  • ????????????}??????
  • ????????}?????????????
  • ????}??????
  • ????@Override??????
  • ????public?void?surfaceDestroyed(SurfaceHolder?holder)?{??????
  • ????????//?TODO?Auto-generated?method?stub??????
  • ????????myCamera.stopPreview();//停止預覽??????
  • ?????????myCamera.release();//釋放相機資源??????
  • ?????????myCamera?=?null;??????
  • ??????????????????
  • ????}??????
  • }??????
  • 主activity:

    [java]?view plaincopyprint?
  • import?android.app.Activity;??????
  • import?android.os.Bundle;??????
  • import?android.view.View;??????
  • import?android.view.View.OnClickListener;??????
  • public?class?CameraTest_3?extends?Activity?implements?OnClickListener??{??????
  • ????/**?Called?when?the?activity?is?first?created.?*/??????
  • ????MySurfaceView?mySurface;??????
  • ????boolean?isClicked?=?false;??????
  • ????@Override??????
  • ????public?void?onCreate(Bundle?savedInstanceState)?{??????
  • ????????super.onCreate(savedInstanceState);??????
  • ????????mySurface?=?new?MySurfaceView(this);??????
  • ????????setContentView(mySurface);??????
  • ????????mySurface.setOnClickListener(this);??????
  • ????}??????
  • ????@Override??????
  • ????public?void?onClick(View?v)?{??????
  • ????????//?TODO?Auto-generated?method?stub??????
  • ????????if(!isClicked)??????
  • ????????{??????
  • ????????????mySurface.tackPicture();??????
  • ????????????isClicked?=?true;??????
  • ????????}else??????
  • ????????{??????
  • ????????????mySurface.voerTack();??????
  • ????????????isClicked?=?false;??????
  • ??????????????????
  • ????????}??????
  • ??????????????
  • ????}??????
  • 這樣就是實現(xiàn)了拍照的功能,那么怎樣要圖片保存呢?那么這是就需要在那個參數(shù)中的jpeg的
    方法里面進行處理了,那個方法的data參數(shù),就是相片的數(shù)據(jù)。
    我們通過BitmapFactory.decodeByteArray(data, 0, data.length)來獲得圖片并通過io處理,將圖片保存到想要保存的位置
    下面這段代碼,是將照片保存到/sdcard/wjh.jpg;并把一些沒有用到的代碼全部刪掉,剩下一些必須的代碼

    [java]?view plaincopyprint?
  • package?java.camera;??????
  • import?java.io.BufferedInputStream;??????
  • import?java.io.BufferedOutputStream;??????
  • import?java.io.File;??????
  • import?java.io.FileOutputStream;??????
  • import?java.io.IOException;??????
  • import?java.io.OutputStream;??????
  • import?android.content.Context;??????
  • import?android.graphics.Bitmap;??????
  • import?android.graphics.BitmapFactory;??????
  • import?android.graphics.PixelFormat;??????
  • import?android.hardware.Camera;??????
  • import?android.hardware.Camera.PictureCallback;??????
  • import?android.hardware.Camera.ShutterCallback;??????
  • import?android.util.Log;??????
  • import?android.view.SurfaceHolder;??????
  • import?android.view.SurfaceView;??????
  • public?class?MySurfaceView?extends?SurfaceView?implements?SurfaceHolder.Callback{??????
  • ????SurfaceHolder?holder;??????
  • ????Camera?myCamera;??????
  • ????private?PictureCallback?jpeg?=?new?PictureCallback()?{??????
  • ??????????????
  • ????????@Override??????
  • ????????public?void?onPictureTaken(byte[]?data,?Camera?camera)?{??????
  • ????????????//?TODO?Auto-generated?method?stub??????
  • ????????????try??????
  • ????????????{??????
  • ????????????????Bitmap?bm?=?BitmapFactory.decodeByteArray(data,?0,?data.length);??????
  • ????????????????File?file?=?new?File("/sdcard/wjh.jpg");??????
  • ????????????????BufferedOutputStream?bos???????
  • ????????????????=?new?BufferedOutputStream(new?FileOutputStream(file));??????
  • ????????????????bm.compress(Bitmap.CompressFormat.JPEG,100,bos);??????
  • ????????????????bos.flush();??????
  • ????????????????bos.close();??????
  • ????????????}catch(Exception?e)??????
  • ????????????{??????
  • ????????????????e.printStackTrace();??????
  • ????????????}??????
  • ????????}??????
  • ????};??????
  • ????public?MySurfaceView(Context?context)??????
  • ????{??????
  • ????????super(context);??????
  • ????????holder?=?getHolder();//獲得surfaceHolder引用??????
  • ?????????holder.addCallback(this);??????
  • ????????holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//設置類型????????
  • ????}??????
  • ????public?void?tackPicture()??????
  • ????{??????
  • ????????myCamera.takePicture(null,null,jpeg);??????
  • ????}??????
  • ????public?void?voerTack()??????
  • ????{??????
  • ????????myCamera.startPreview();??????
  • ????}??????
  • ????@Override??????
  • ????public?void?surfaceChanged(SurfaceHolder?holder,?int?format,?int?width,??????
  • ????????????int?height)?{??????
  • ????????myCamera.startPreview();??????????????
  • ????}??????
  • ????@Override??????
  • ????public?void?surfaceCreated(SurfaceHolder?holder)?{??????
  • ????????//?TODO?Auto-generated?method?stub??????
  • ????????if(myCamera?==?null)??????
  • ????????{??????
  • ????????????myCamera?=?Camera.open();//開啟相機,不能放在構造函數(shù)中,不然不會顯示畫面.??????
  • ????????????try?{??????
  • ????????????????myCamera.setPreviewDisplay(holder);??????
  • ????????????}?catch?(IOException?e)?{??????
  • ????????????????//?TODO?Auto-generated?catch?block??????
  • ????????????????e.printStackTrace();??????
  • ????????????}??????
  • ????????}?????????????
  • ????}??????
  • ????@Override??????
  • ????public?void?surfaceDestroyed(SurfaceHolder?holder)?{??????
  • ????????//?TODO?Auto-generated?method?stub??????
  • ????????myCamera.stopPreview();//停止預覽??????
  • ????????myCamera.release();//釋放相機資源??????
  • ????????myCamera?=?null;??????
  • ????}??????
  • }??????
  • 注意,這是必須添加在sd卡上寫數(shù)據(jù)的權限

    [html]?view plaincopyprint?
  • <uses-permission?android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>??
  • (7)能夠拍照了,這下子要考慮如何讓圖片更好看了,這顯然是專業(yè)人士的強項,但是我們在程序上,也可以做一些處理,
    向上面的那些,因為我直接把surfaceView當做整體布局,就可能出現(xiàn)屏幕被拉開了,不是很好看,所以這時,就可以不要把
    surfaceView弄成整體布局,把他弄到一個布局管理器,再設置相關的參數(shù).
    這時需要注意的是有些參數(shù)不能隨便亂設
    如以下代碼:

    [java]?view plaincopyprint?
  • Camera.Parameters?parames?=?myCamera.getParameters();//獲得參數(shù)對象??
  • parames.setPictureFormat(PixelFormat.JPEG);//設置圖片格式??
  • parames.setPreviewSize(640,480);//這里面的參數(shù)只能是幾個特定的參數(shù),否則會報錯.(176*144,320*240,352*288,480*360,640*480)??
  • myCamera.setParameters(parames);??
  • 還有自動對焦,當然有些手機沒有這個功能,自動對焦是通過autoFocus()這個方法調用一個自動對焦的接口,并在里面進行處理。
    注意,這個方法必須在startPreview()和stopPreview()中間。
    AutoFocusCallback是自動對焦的接口,實現(xiàn)它必須實現(xiàn)public void onAutoFocus(boolean success, Camera camera)這個方法,
    所以我們可以將拍照方法放在這里面,然后對焦后再進行拍攝。。效果會好很多。
    注意自動對焦需要添加

    [html]?view plaincopyprint?
  • <uses-feature?android:name="android.hardware.camera.autofocus"?/>??
  • ?

    下面是主要代碼,直接貼出來了

    [java]?view plaincopyprint?
  • import?java.io.BufferedOutputStream;??????
  • import?java.io.File;??????
  • import?java.io.FileOutputStream;??????
  • import?java.io.IOException;??????
  • import?android.app.Activity;??????
  • import?android.content.pm.ActivityInfo;??????
  • import?android.graphics.Bitmap;??????
  • import?android.graphics.BitmapFactory;??????
  • import?android.graphics.PixelFormat;??????
  • import?android.hardware.Camera;??????
  • import?android.hardware.Camera.AutoFocusCallback;??????
  • import?android.hardware.Camera.PictureCallback;??????
  • import?android.os.Bundle;??????
  • import?android.view.SurfaceHolder;??????
  • import?android.view.SurfaceView;??????
  • import?android.view.View;??????
  • import?android.view.Window;??????
  • import?android.view.SurfaceHolder.Callback;??????
  • import?android.view.View.OnClickListener;??????
  • public?class?CameraTest_4?extends?Activity?implements??????
  • Callback,?OnClickListener,?AutoFocusCallback{??????
  • ????SurfaceView?mySurfaceView;//surfaceView聲明??????
  • ????SurfaceHolder?holder;//surfaceHolder聲明??????
  • ????Camera?myCamera;//相機聲明??????
  • ????String?filePath="/sdcard/wjh.jpg";//照片保存路徑??????
  • ????boolean?isClicked?=?false;//是否點擊標識??????
  • ????//創(chuàng)建jpeg圖片回調數(shù)據(jù)對象??????
  • ????PictureCallback?jpeg?=?new?PictureCallback()?{??????
  • ??????????????
  • ????????@Override??????
  • ????????public?void?onPictureTaken(byte[]?data,?Camera?camera)?{??????
  • ????????????//?TODO?Auto-generated?method?stub??????
  • ????????????try??????
  • ????????????{//?獲得圖片??????
  • ????????????Bitmap?bm?=?BitmapFactory.decodeByteArray(data,?0,?data.length);??????
  • ????????????File?file?=?new?File(filePath);??????
  • ????????????BufferedOutputStream?bos?=??????
  • ????????????????new?BufferedOutputStream(new?FileOutputStream(file));??????
  • ????????????bm.compress(Bitmap.CompressFormat.JPEG,?100,?bos);//將圖片壓縮到流中??????
  • ????????????bos.flush();//輸出??????
  • ????????????bos.close();//關閉??????
  • ????????????}catch(Exception?e)??????
  • ????????????{??????
  • ????????????????e.printStackTrace();??????
  • ????????????}??????
  • ??????????????????
  • ????????}??????
  • ????};??????
  • ????/**?Called?when?the?activity?is?first?created.?*/??????
  • ????@Override??????
  • ????public?void?onCreate(Bundle?savedInstanceState)?{??????
  • ????????super.onCreate(savedInstanceState);??????
  • ????????requestWindowFeature(Window.FEATURE_NO_TITLE);//無標題?????????????????
  • ????????//設置拍攝方向??????
  • ????????this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);??????
  • ????????setContentView(R.layout.main);??????
  • ????????//獲得控件??????
  • ????????mySurfaceView?=?(SurfaceView)findViewById(R.id.surfaceView1);??????
  • ????????//獲得句柄??????
  • ????????holder?=?mySurfaceView.getHolder();??????
  • ????????//添加回調??????
  • ????????holder.addCallback(this);??????
  • ????????//設置類型??????
  • ????????holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);??????
  • ????????//設置監(jiān)聽??????
  • ????????mySurfaceView.setOnClickListener(this);??????
  • ????}??????
  • ????@Override??????
  • ????public?void?surfaceChanged(SurfaceHolder?holder,?int?format,?int?width,??????
  • ????????????int?height)?{??????
  • ????????//?TODO?Auto-generated?method?stub??????
  • ????????//設置參數(shù)并開始預覽??????
  • ????????Camera.Parameters?params?=?myCamera.getParameters();??????
  • ????????params.setPictureFormat(PixelFormat.JPEG);??????
  • ????????params.setPreviewSize(640,480);??????
  • ????????myCamera.setParameters(params);??????
  • ????????myCamera.startPreview();??????
  • ??????????????
  • ????}??????
  • ????@Override??????
  • ????public?void?surfaceCreated(SurfaceHolder?holder)?{??????
  • ????????//?TODO?Auto-generated?method?stub??????
  • ????????//開啟相機??????
  • ????????if(myCamera?==?null)??????
  • ????????{??????
  • ????????????myCamera?=?Camera.open();??????
  • ????????????try?{??????
  • ????????????????myCamera.setPreviewDisplay(holder);??????
  • ????????????}?catch?(IOException?e)?{??????
  • ????????????????//?TODO?Auto-generated?catch?block??????
  • ????????????????e.printStackTrace();??????
  • ????????????}??????
  • ????????}??????
  • ??????????????
  • ????}??????
  • ????@Override??????
  • ????public?void?surfaceDestroyed(SurfaceHolder?holder)?{??????
  • ????????//?TODO?Auto-generated?method?stub??????
  • ????????//關閉預覽并釋放資源??????
  • ????????myCamera.stopPreview();??????
  • ????????myCamera.release();??????
  • ????????myCamera?=?null;??????
  • ??????????????
  • ????}??????
  • ????@Override??????
  • ????public?void?onClick(View?v)?{??????
  • ????????//?TODO?Auto-generated?method?stub??????
  • ????????if(!isClicked)??????
  • ????????{??????
  • ????????????myCamera.autoFocus(this);//自動對焦??????
  • ????????????isClicked?=?true;??????
  • ????????}else??????
  • ????????{??????
  • ????????????myCamera.startPreview();//開啟預覽??????
  • ????????????isClicked?=?false;??????
  • ????????}??????
  • ??????????????
  • ????}??????
  • ????@Override??????
  • ????public?void?onAutoFocus(boolean?success,?Camera?camera)?{??????
  • ????????//?TODO?Auto-generated?method?stub??????
  • ????????if(success)??????
  • ????????{??????
  • ????????????//設置參數(shù),并拍照??????
  • ????????????Camera.Parameters?params?=?myCamera.getParameters();??????
  • ????????????params.setPictureFormat(PixelFormat.JPEG);??????
  • ????????????params.setPreviewSize(640,480);??????
  • ????????????myCamera.setParameters(params);??????
  • ????????????myCamera.takePicture(null,?null,?jpeg);??????
  • ????????}??????
  • ??????????????
  • ????}??????
  • }??????
  • main.xml:

    [html]?view plaincopyprint?
  • <linearlayout?xmlns:android="http://schemas.android.com/apk/res/android"?????
  • ????androidrientation="vertical"??????
  • ????android:layout_width="fill_parent"??????
  • ????android:layout_height="fill_parent"??????
  • ????>??????
  • ????<surfaceview?android:id="@+id/surfaceView1"?????
  • ?????android:layout_width="640px"??????
  • ?????android:layout_height="480px"??????
  • ?????android:layout_gravity="center">??????
  • AndroidManifest.xml:

    [html]?view plaincopyprint?
  • <?xml?version="1.0"?encoding="utf-8"?>????
  • <manifest?xmlns:android="http://schemas.android.com/apk/res/android"????
  • ??????package="com.wjh.camera"????
  • ??????android:versionCode="1"????
  • ??????android:versionName="1.0">????
  • ????<uses-sdk?android:minSdkVersion="7"?/>????
  • ????<uses-permission?android:name="android.permission.CAMERA"></uses-permission>????
  • ????<uses-feature?android:name="android.hardware.camera.autofocus"?/>????
  • ????????<uses-permission?android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>????
  • ????<application?android:icon="@drawable/icon"?android:label="@string/app_name">????
  • ????????<activity?android:name=".CameraTest_4"????
  • ??????????????????android:label="@string/app_name">????
  • ????????????<intent-filter>????
  • ????????????????<action?android:name="android.intent.action.MAIN"?/>????
  • ????????????????<category?android:name="android.intent.category.LAUNCHER"?/>????
  • ????????????</intent-filter>????
  • ????????</activity>????
  • ????</application>????
  • </manifest>????
  • ?

    PS:其實自己去實現(xiàn)相機的必要性不大,大部分應用都是直接調用系統(tǒng)的相機,畢竟相機是涉及到一些比較專業(yè)的成像知識.

    轉載于:https://www.cnblogs.com/qingchen1984/p/4766395.html

    總結

    以上是生活随笔為你收集整理的android之相机开发的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。