缘起

这是一个照相的范例,可预览,也可存档。

当初参加一个比赛,准备要做的应用的功能之一,可惜比赛没过关,不过还是将它弄成一个完整范例了。

下载

代码

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");}};}



更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 自定义Android的Spinner
  3. Android的提交数据到服务器
  4. 浅谈Android之SurfaceFlinger相关介绍(二)
  5. 禁掉安卓手机每次运行时都要安装 Unlock、Setting、Android(安卓
  6. 向sd写文件时权限
  7. Eclipse+CDT+GDB调试android NDK程序
  8. android ctrl + 左键(鼠标左键)直接打开xml文件
  9. android j使用JNI实现ava语言调用C语言

随机推荐

  1. PHP面试题大全(值得收藏)
  2. 关于php类的定义与实例化方法
  3. PHP实现微信模板消息发送给指定用户
  4. PHP怎么获取今天、昨天、明天的日期
  5. PHP如何使用AES加密和解密
  6. PHP 服务器端处理跨域问题
  7. OWASP 维护的 PHP 安全配置速查表
  8. Javascript 到 PHP 加密通讯的简单实现
  9. PHP+Ajax如何实现上传文件进度条动态显示
  10. php统计文件中的代码行数