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



Android核心技术——Android入门

-
  • 1970年01月01日 08:00

<em>Android</em>照相机<em>范例</em>

<em>Android</em> <em>Camera</em>配合SurfaceView调用系统摄像头拍照并保存到本机上 2013-09-16 上传大小:72KB SurfaceView<em>Camera</em>摄像头<em>Android</em> <em>Android</em> <em>Camera</em>配合SurfaceView调用系统摄像...
  • 2018年04月17日 00:00

Android7.0官方Samples

示例 以下是 Android N 的代码示例。要在 Android Studio 中下载示例,请选择 File > Import Samples 菜单项。 注:这些可下载的项目设计...
  • wds1181977
  • wds1181977
  • 2016-08-23 16:55:22
  • 2353

[Android]照相机范例代码

缘起 这是一个照相的范例,可预览,也可存档。 当初参加一个比赛,准备要做的应用的功能之一,可惜比赛没过关,不过还是将它弄成一个完整范例了。 下载 代码 package com.cloud...
  • cloudhsu
  • cloudhsu
  • 2012-04-19 21:51:53
  • 10490

Android拍照、录像、录音代码范例

import java.io.File; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util...
  • gf771115
  • gf771115
  • 2011-07-27 15:19:30
  • 16379

<em>Android</em>下WebView中调用系统相机拍照<em>范例</em>

2013-05-08 上传大小:22KB <em>Android</em>html<em>camera</em>拍照webview 自定义webview中的网页“拍照”按钮调用系统相机拍照的API接口MyBrowserAPI.CapturePhoto(filename),在网页...
  • 2018年04月17日 00:00

Google <em>Android</em> SDK开发<em>范例</em>大全(PDF完整版4)

相机预览及拍照临时文件——<em>Camera</em>及PictureCallback事件 第8章 当<em>Android</em>与Internet接轨 8.1 HTTPGET/POST传递参数——HTTP连接示范 8.2 在程序里浏览网页——Web...
  • 2018年04月14日 00:00

关于Android MediaCodec 的内容

MediaCodec是一个可以对音视频数据进行编码和解码的Android类,本文给出代码范例并解答常见问题。 概述(可忽略) Mediacodec类在Android 4.1(API 16)...
  • kunluo
  • kunluo
  • 2017-03-03 19:59:57
  • 559

Android 1000实例代码集结(三 )

SeeJoPlayer(播放器).7z tablelogin(登陆界面).rar TankWar坦克大战.zip UI设计之 仿做蘑菇街UI设计 源码.zip ViewPager-实现左右两个屏幕的切...
  • watertekhqx
  • watertekhqx
  • 2017-04-27 17:24:47
  • 1464

Ionic调用摄像头采集照片

安装插件:cordova plugin add cordova-plugin-camera照片范例:navigator.device.capture.captureImage(onSuccess, o...
  • IV_IV
  • IV_IV
  • 2016-12-08 17:20:05
  • 497
收藏助手
不良信息举报
您举报文章:[Android]照相机范例代码
举报原因:
原因补充:

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