[Android]照相機範例代碼

來源:互聯網
上載者:User
緣起

這是一個照相的範例,可預覽,也可存檔。

當初參加一個比賽,準備要做的應用的功能之一,可惜比賽沒過關,不過還是將它弄成一個完整範例了。

下載

代碼

package com.clouddemo.cameratest;import java.io.File;import java.io.FileOutputStream;import java.io.OutputStream;import java.text.SimpleDateFormat;import java.util.Date;import android.content.ContentResolver;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.hardware.Camera;import android.hardware.Camera.PictureCallback;import android.hardware.Camera.ShutterCallback;import android.os.Environment;import android.provider.MediaStore;import android.util.Log;import android.view.Display;import android.view.Surface;import android.view.SurfaceHolder;import android.view.WindowManager;public class CBCamera {static CBCamera m_instance;static final String TAG = "CameraDemo";Camera m_camera;WindowManager m_windowManager;ContentResolver m_contentResolver;public static CBCamera instance(){if(m_instance == null){m_instance = new CBCamera();}return m_instance;}private CBCamera(){open();}public void setWindowManager(WindowManager windowManager){m_windowManager = windowManager;}public void setContentResolver(ContentResolver contentResolver){m_contentResolver = contentResolver;}public void initialPreview(SurfaceHolder holder){try{if(m_camera != null){m_camera.setPreviewDisplay(holder);}}catch(Exception ex){ex.printStackTrace();}}public void startPreview(int width, int height){if(m_camera != null){Camera.Parameters parameters = m_camera.getParameters();Display display = m_windowManager.getDefaultDisplay();        if(display.getRotation() == Surface.ROTATION_0)        {            parameters.setPreviewSize(height, width);                                       m_camera.setDisplayOrientation(90);        }        if(display.getRotation() == Surface.ROTATION_90)        {            parameters.setPreviewSize(width, height);                                   }        if(display.getRotation() == Surface.ROTATION_180)        {            parameters.setPreviewSize(height, width);                       }        if(display.getRotation() == Surface.ROTATION_270)        {            parameters.setPreviewSize(width, height);            m_camera.setDisplayOrientation(180);        }        //parameters.setPreviewSize(width, height);        m_camera.setParameters(parameters);        m_camera.startPreview();}}public void stopPreview(){if(m_camera != null){m_camera.stopPreview();}}public void takePicture(){if(m_camera != null)m_camera.takePicture(shutterCallback, rawCallback, jpegCallback);}public void open(){if(m_camera == null)m_camera = Camera.open();}public void release(){if(m_camera != null){m_camera.release();m_camera = null;}}ShutterCallback shutterCallback = new ShutterCallback() {public void onShutter() {Log.d(TAG, "onShutter'd");}};/** Handles data for raw picture */PictureCallback rawCallback = new PictureCallback() {public void onPictureTaken(byte[] data, Camera camera) {Log.d(TAG, "onPictureTaken - raw");}};/** Handles data for jpeg picture */PictureCallback jpegCallback = new PictureCallback() {public void onPictureTaken(byte[] data, Camera camera) {try{Bitmap bitmapPicture = BitmapFactory.decodeByteArray(data, 0, data.length);String path = Environment.getExternalStorageDirectory().toString();String filename;                Date date = new Date(0);                SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMMddHHmmss");                filename =  sdf.format(date);OutputStream fOut = null;                //File file = new File(path, "/DCIM/"+filename+".jpg");File file = new File(path, "/"+filename+".jpg");                fOut = new FileOutputStream(file);//FileOutputStream out = new FileOutputStream(String.format("/sdcard/DCIM/Signatures/%d.jpg", System.currentTimeMillis()));bitmapPicture.compress(Bitmap.CompressFormat.JPEG, 0, fOut);fOut.flush();fOut.close();MediaStore.Images.Media.insertImage(m_contentResolver,file.getAbsolutePath(),file.getName(),file.getName());}catch(Exception ex){ex.printStackTrace();}finally{camera.startPreview();}Log.d(TAG, "onPictureTaken - jpeg");}};}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.