亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android 開發隨手筆記之使用攝像頭拍照

2020-04-11 11:15:14
字體:
來源:轉載
供稿:網友

在Android中,使用攝像頭拍照一般有兩種方法, 一種是調用系統自帶的Camera,另一種是自己寫一個攝像的界面。

      我們要添加如下權限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.CAMERA"/>

1、調用系統Camera

      調用系統自帶的Camera主要的步驟為:

(1)構造圖片存儲的路徑名

(2)使用Intent啟動Camera Activity

(3)將拍攝的圖片寫入到文件

(4)將圖片顯示在MainActivity中

      首先,構造圖片名:

File filePath = new File(Environment.getExternalStorageDirectory(), "myCamera");if(!filePath.exists()){ filePath.mkdirs();}fileName = new File(filePath, System.currentTimeMillis() + ".jpg");try{ if(!fileName.exists()){  fileName.createNewFile(); }}catch (Exception e){ e.printStackTrace();}

      然后,啟動Camera Activity:

// intent用來啟動系統自帶的CameraIntent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 將系統Camera的拍攝結果寫入到文件 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(fileName));// 啟動intent對應的Activity,返回默認消息 startActivityForResult(intent, Activity.DEFAULT_KEYS_DIALER);

      最后,將圖片顯示在MainActivity內。這時,我們通過重載onActivityResult()方法來獲取Camera返回的消息。

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data){ if(requestCode == Activity.DEFAULT_KEYS_DIALER){  // MainActivity接收Camera返回的消息,然后將已經寫入的圖片顯示在ImageView內  imageView.setImageURI(Uri.fromFile(fileName)); }}

完整代碼為:

import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ImageView;import java.io.File;public class MainActivity extends Activity { private File fileName = null; private Button button; private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  button = (Button)findViewById(R.id.button);  imageView = (ImageView)findViewById(R.id.imageView);  button.setOnClickListener(new View.OnClickListener() {   @Override   public void onClick(View v) {    File filePath = new File(Environment.getExternalStorageDirectory(), "myCamera");    if(!filePath.exists()){     filePath.mkdirs();    }    fileName = new File(filePath, System.currentTimeMillis() + ".jpg");    try{     if(!fileName.exists()){      fileName.createNewFile();     }    }catch (Exception e){     e.printStackTrace();    }    // intent用來啟動系統自帶的Camera    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);    // 將系統Camera的拍攝結果寫入到文件    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(fileName));    // 啟動intent對應的Activity,返回默認消息    startActivityForResult(intent, Activity.DEFAULT_KEYS_DIALER);   }  }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data){  if(requestCode == Activity.DEFAULT_KEYS_DIALER){   // MainActivity接收Camera返回的消息,然后將已經寫入的圖片顯示在ImageView內   imageView.setImageURI(Uri.fromFile(fileName));  } }}

2、自己寫一個攝像界面

      自己寫攝像的界面,主要應用了SurfaceView來顯示攝像機的畫面。然后通過一個Button來保存當前的畫面。

      同樣的,我們需要添加camera和SDCard權限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.CAMERA"/>

      首先,我們初始化這個SurfaceView,為這個SurfaceView添加一個對應的Callback即可:

private SurfaceView surfaceView;private SurfaceHolder.Callback callback;surfaceView = (SurfaceView)findViewById(R.id.surfaceView); callback = new SurfaceHolder.Callback(){  @Override  public void surfaceCreated(SurfaceHolder holder) {   startCamera(); // 用于啟動攝像頭  }  @Override  public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {  }  @Override  public void surfaceDestroyed(SurfaceHolder holder) {   stopCamera(); // 用于關閉攝像頭  } }; surfaceView.getHolder().addCallback(callback); // 將Callback綁定到SurfaceView

      在啟動攝像頭的時候,首先打開攝像頭連接,然后將其圖像輸出到SurfaceView上,然后啟動攝像頭預覽即可在SurfaceView上顯示攝像頭的畫面,這里的畫面和實際畫面相差有90度,所以我們需要將圖像旋轉90度之后才可以和拍攝的物體方向一致。

      在關閉攝像頭時,只要停止預覽,然后釋放攝像頭資源即可。

public void startCamera(){ camera = Camera.open(); try {  camera.setPreviewDisplay(surfaceView.getHolder());  camera.setDisplayOrientation(90);  camera.startPreview(); } catch (IOException e) {  e.printStackTrace(); }}public void stopCamera(){ camera.stopPreview(); camera.release(); camera = null;}

      最后,是將拍攝到的圖片保存到SDCard,我們單擊Button來拍攝圖片,調用Camera.takePicture()方法,其原型為:

/**  * Equivalent to takePicture(shutter, raw, null, jpeg).  *  * @see #takePicture(ShutterCallback, PictureCallback, PictureCallback, PictureCallback)  */ public final void takePicture(ShutterCallback shutter, PictureCallback raw,   PictureCallback jpeg) {  takePicture(shutter, raw, null, jpeg); }

      其中,shutter為按快門瞬間的回調,就是說按快門瞬間會調用ShutterCallback.onShutter()方法。raw是未壓縮的圖像的回調,即處理圖像原始數據的時候會調用PictureCallback.onPictureTaken()方法。jpeg為處理JPEG圖片時候的回調,即我們需要將圖像數據按照jpg格式保存的時候會調用這個方法,PictureCallback.onPIctureTaken()。這里我們就調用了這個方法,從而將jpg圖片存儲到SDCard上。

button.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View v) {   camera.takePicture(null, null, new Camera.PictureCallback() {    @Override    public void onPictureTaken(byte[] data, Camera camera) {     try {      File filePath = new File(Environment.getExternalStorageDirectory(), "myCamera");      if(!filePath.exists()) {       filePath.mkdirs();      }      File fileName = new File(filePath, System.currentTimeMillis() + ".jpg");      fileName.createNewFile();      FileOutputStream fos = new FileOutputStream(fileName);      fos.write(data);      fos.flush();      fos.close();     } catch (IOException e) {      e.printStackTrace();     }    }   });  } });

      這樣,我們便實現了用SurfaceView預覽攝像頭畫面,點擊Button將當前預覽保存到SDCard中。

完整代碼如下:

import android.app.Activity;import android.hardware.Camera;import android.os.Bundle;import android.os.Environment;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.widget.Button;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;public class MainActivity extends Activity { private Camera camera; private Button button; private SurfaceView surfaceView; private SurfaceHolder.Callback callback; @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  button = (Button)findViewById(R.id.button);  surfaceView = (SurfaceView)findViewById(R.id.surfaceView);  callback = new SurfaceHolder.Callback(){   @Override   public void surfaceCreated(SurfaceHolder holder) {    startCamera();   }   @Override   public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {   }   @Override   public void surfaceDestroyed(SurfaceHolder holder) {    stopCamera();   }  };  surfaceView.getHolder().addCallback(callback);  button.setOnClickListener(new View.OnClickListener() {   @Override   public void onClick(View v) {    camera.takePicture(null, null, new Camera.PictureCallback() {     @Override     public void onPictureTaken(byte[] data, Camera camera) {      try {       File filePath = new File(Environment.getExternalStorageDirectory(), "myCamera");       if(!filePath.exists()) {        filePath.mkdirs();       }       File fileName = new File(filePath, System.currentTimeMillis() + ".jpg");       fileName.createNewFile();       FileOutputStream fos = new FileOutputStream(fileName);       fos.write(data);       fos.flush();       fos.close();      } catch (IOException e) {       e.printStackTrace();      }     }    });   }  }); } public void startCamera(){  camera = Camera.open();  try {   camera.setPreviewDisplay(surfaceView.getHolder());   camera.setDisplayOrientation(90);   camera.startPreview();  } catch (IOException e) {   e.printStackTrace();  } } public void stopCamera(){  camera.stopPreview();  camera.release();  camera = null; }}

以上所述是本文給大家介紹的關于Android 開發隨手筆記之使用攝像頭拍照的全部內容,希望大家喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲精品久久| 国产激情久久久| 国产精品日日做人人爱| 国产精品视频在线观看| 国产亚洲精品美女| 色噜噜狠狠狠综合曰曰曰88av| 国产精品私拍pans大尺度在线| 91精品国产91久久久久久不卡| 疯狂欧美牲乱大交777| 91国产一区在线| 亚洲一区av在线播放| 欧美国产日韩一区二区三区| 久久成人18免费网站| 精品国产成人av| 日韩欧美一区二区在线| 亚洲石原莉奈一区二区在线观看| 国产盗摄xxxx视频xxx69| 国产69精品久久久久久| 亚洲一区二区三区成人在线视频精品| 亚洲综合最新在线| 久久久免费观看视频| 亚洲18私人小影院| 精品精品国产国产自在线| 国产亚洲精品综合一区91| 国产精品视频自拍| 国产精品2018| 精品magnet| 欧美在线www| 日韩中文字幕精品| 亚洲精选中文字幕| 中文字幕亚洲欧美一区二区三区| 欧洲日本亚洲国产区| 97国产suv精品一区二区62| 国产一区二区三区在线播放免费观看| 日韩一区在线视频| 色综久久综合桃花网| 成人春色激情网| 日本欧美一二三区| 97超碰色婷婷| 亚洲综合中文字幕在线| 国产精品免费一区二区三区都可以| 亚洲国产精久久久久久| 欧美一区二区视频97| 91精品免费视频| 久久久精品网站| 狠狠躁夜夜躁人人爽天天天天97| 国产精品免费一区二区三区都可以| 亚洲精品日韩久久久| 一区二区三区四区精品| 亚洲欧美激情四射在线日| 蜜臀久久99精品久久久无需会员| 欧美在线播放视频| 亚洲欧洲自拍偷拍| 欧美激情乱人伦| 成人性生交xxxxx网站| 亚洲国内高清视频| 日韩免费看的电影电视剧大全| 正在播放欧美视频| 欧美国产精品人人做人人爱| 欧美精品精品精品精品免费| 国产日韩在线精品av| 91免费视频网站| 亚洲影院在线看| 国产精品电影久久久久电影网| 久久久精品久久久久| 国产精品老女人精品视频| 欧美日韩激情网| 亚洲性视频网站| 国产中文字幕91| 国产亚洲精品激情久久| 亚洲欧美中文日韩在线| 欧美日韩亚洲国产一区| 国产精品v日韩精品| 国产精品扒开腿爽爽爽视频| 欧美超级免费视 在线| 国产精品免费视频xxxx| 中文字幕亚洲欧美日韩在线不卡| 久久久亚洲欧洲日产国码aⅴ| 国产成人精品免费久久久久| 亚洲国产精品va| 欧美高跟鞋交xxxxhd| 国外日韩电影在线观看| 欧美一性一乱一交一视频| 亚洲国产欧美日韩精品| 国产精品久久久久久超碰| 亚洲人成电影网站色www| 亚洲国产一区二区三区在线观看| 亚洲成人激情小说| 欧美一级电影在线| 在线一区二区日韩| 一色桃子一区二区| 91九色在线视频| 久久影院资源网| 国内精品久久久久久影视8| 久久精品国产久精国产思思| 国产精品黄视频| 丝袜美腿亚洲一区二区| 日韩一区二区三区在线播放| 亚洲欧美国产高清va在线播| 韩剧1988免费观看全集| 亚洲国产精品网站| 国产精品福利网站| 久久艳片www.17c.com| 色婷婷亚洲mv天堂mv在影片| 国产精品欧美日韩久久| 欧美视频在线免费看| 亚洲精品中文字幕av| 精品国产乱码久久久久久天美| 国产午夜精品理论片a级探花| 欧美巨大黑人极品精男| 88xx成人精品| 92看片淫黄大片欧美看国产片| 色偷偷噜噜噜亚洲男人的天堂| 精品久久久久久久久久久久| 国产91精品久久久久久久| 日韩精品视频在线免费观看| 国产+成+人+亚洲欧洲| 亚洲高清久久久久久| 91色精品视频在线| 国产不卡精品视男人的天堂| 疯狂做受xxxx高潮欧美日本| 97在线日本国产| 高清日韩电视剧大全免费播放在线观看| 国产91精品最新在线播放| 欧美中文字幕精品| 久久久久久国产精品美女| 国产精品十八以下禁看| 久久亚洲国产精品| 国产亚洲精品综合一区91| 日本伊人精品一区二区三区介绍| 91av视频在线观看| 亚洲va欧美va国产综合久久| 色综合老司机第九色激情| 97av在线播放| 国产视频欧美视频| 日韩免费看的电影电视剧大全| 久久免费视频在线| 韩国三级日本三级少妇99| 国产脚交av在线一区二区| 91国在线精品国内播放| 亚洲伦理中文字幕| 伊人伊成久久人综合网站| 国产精品免费久久久| 亚洲国产精品女人久久久| 在线观看中文字幕亚洲| 国产精品久久久亚洲| 精品中文字幕在线| 亚洲精品日韩丝袜精品| 97久久精品国产| 日韩欧美中文在线| 成人欧美在线观看| 久久视频国产精品免费视频在线| 亚洲人成网站999久久久综合| 欧美精品久久久久久久免费观看| 国产精品美女午夜av| 欧美极品欧美精品欧美视频| 亚洲黄一区二区| 91免费精品视频| 亚洲曰本av电影| 亚洲成人性视频| 亚洲区bt下载| 亚洲二区中文字幕| 羞羞色国产精品| 91夜夜揉人人捏人人添红杏|