[Android]照相机范例代码
16lz
2021-01-25
缘起
这是一个照相的范例,可预览,也可存档。
当初参加一个比赛,准备要做的应用的功能之一,可惜比赛没过关,不过还是将它弄成一个完整范例了。
下载
代码
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");}};}
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- 自定义Android的Spinner
- Android的提交数据到服务器
- 浅谈Android之SurfaceFlinger相关介绍(二)
- 禁掉安卓手机每次运行时都要安装 Unlock、Setting、Android(安卓
- 向sd写文件时权限
- Eclipse+CDT+GDB调试android NDK程序
- android ctrl + 左键(鼠标左键)直接打开xml文件
- android j使用JNI实现ava语言调用C语言