[Android]照相机范例代码

原创 2012年04月19日 21:51:53

缘起

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

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

下载

代码

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



《Android5.0开发范例代码大全》读书笔记

记录一些读书心得
  • lovewaterman
  • lovewaterman
  • 2016年10月26日 23:57
  • 606

Android 照相机实现方式

在android 中实现照相机的方式一般有两种 1、调用系统的相机 2、自定义相机 1、调用系统照相机程序拍照 1.定义所需要的权限 2.我们需要定义调用系统相机App的In...
  • qian_xiao_lj
  • qian_xiao_lj
  • 2016年03月02日 10:19
  • 2710

Android调用系统相机

简述:   Android开发中会经常遇到调用系统相机功能的场景,今天总结一下Camera的基本使用。...
  • u012810020
  • u012810020
  • 2016年08月27日 10:40
  • 1791

Android视频通话 Java源码

最近学习Android平台下跨平台音视频通信开发,虽然网上有很多开源项目供我们参考学习,但音视频效果很一般,还有很多不稳定的因素,毕竟是开源嘛。在国内我找到了一个比较好音视频通信解决方案(百度下载官方...
  • little_rui
  • little_rui
  • 2014年11月19日 16:33
  • 964

Google Android SDK开发范例大全目录

第1章 了解、深入、动手做...... 1 1.1 红透半边天的Android... 2 1.2 本书目的及涵盖范例范围...... 3 1.3 如何阅读本书...... 4 1.4 ...
  • u013058160
  • u013058160
  • 2015年08月10日 11:07
  • 698

一份很易懂的Android手机拍照代码

轻松的拍照 这个教程可以教你如何用一个已经安装的相机APP来拍照 首先来请求一个相机权限 如果拍照这个功能在你的应用里是很核心的功能,那么你可以在商店里要求用户的设备必须要有摄像头才能下载安装...
  • imwangji
  • imwangji
  • 2015年01月11日 00:25
  • 801

Android如何控制照相机

本文译自:http://developer.android.com/training/camera/cameradirect.html 本文中,我们讨论如何使用框架API来直接的控制照相机硬件。...
  • javawebsoa
  • javawebsoa
  • 2013年07月10日 21:31
  • 1675

GTK+2.0编程范例代码分析-第二章(1)

转载请注明:http://blog.csdn.net/hubbybob1/article/details/49466979 本文主要是针对 GTK+2.0编程范例–宋国伟老师的书内的代码做一些注释,...
  • hubbybob1
  • hubbybob1
  • 2015年11月10日 22:35
  • 948

Android官方开发文档Training系列课程中文版:调用相机之控制相机

原文地址:http://android.xsoftlab.net/training/camera/cameradirect.html在这节课,我们会讨论如何使用Android框架API来直接控制相机硬...
  • u011064099
  • u011064099
  • 2016年04月19日 20:18
  • 1149

WCF的简单实例(手写代码实现)--服务端

1、引用: using System.ServiceModel; using System.ServiceModel.Description; 2、申明接口 ///这是接口 [Servi...
  • wyxhd2008
  • wyxhd2008
  • 2012年08月18日 14:21
  • 854
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Android]照相机范例代码
举报原因:
原因补充:

(最多只允许输入30个字)