`
byandby
  • 浏览: 1695734 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android 相机设置

阅读更多
    现在的手机几乎都实现照相机功能了,而且在硬件的支持下像素也越来越高,在现实生活中的用途也越来越广,而在Android中专门 提供了Camera来处理相机相关的事件,Camera 是一个专门用来连接和断开相机服务的类,Camera 下面包括如下几个事件:
 
    Camera.AutoFocusCallback: 自动调焦功能;
    Camera.ErrorCallback:错误信息捕捉;
    Camera.Parameters :相机的属性参数
    Camera.PictureCallback:拍照、产生图片时触发;
    Camera.PreviewCallback:相机预览设置;
    Camera.ShutterCallback:快门设置;
    Camera.Size:图片尺寸;
   
    要在Android中使用相机服务很简单,Camera没有构造方法,我们要使用它直接通过open()方法来打开相机设备,然后通过 Camera.Parameters 对相机的一些属性进行设置,比如输出图片的格式、大小等等。下面是Camera类一些常用的方法介绍。

                                                Camera类的方法
           方法                                                                           说明
  autoFocus                                                                  设置自动对焦
  getParameters                                                            得到相机的参数
  open                                                                          启动相机服务
  release                                                                       释放Camera服务
  setPreviewDisplay                                                        设置预览
  setParameters                                                             设置预览参数
  startPreview                                                                 开始预览
  stopPreview                                                                 停止预览
  takePicture                                                                   拍照

  这里重点说明一下拍照的方法和使用, takePicture 方法要实现3个回调函数,分别是: Camera.ShutterCallback (快门) 和 两个Camera.PictureCallback(图像数据)。这里我们在拍照之后要取得图像数据就需要实现Camera.PictureCallback 的 onPictureTaken 方法。onPictureTaken 中第一个参数就是图像数据, 第二个参数则是相机。
   下面是一个相机拍照的例子。相机需要一个界面来预览当前拍摄的效果,这里可以使用SurfaceView类。 我们先来看看在模拟器上的运行效果吧。



  下面我们来看具体如何使用相机服务预览效果,最后按导航键中键来拍照,将照片保存到SD卡中(当然首先要确认有SD卡插入)。 代码如下

  Activity01类
package xiaohang.zhimeng;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;

public class Activity01 extends Activity {
	
	private Preview mPreview;
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        
        //Create our Preview view and set it as the content of our activity.
        mPreview = new Preview(this);
        setContentView(mPreview);
    }
       
    public boolean onKeyUp(int keyCode, KeyEvent event){
    	switch (keyCode) {
		case KeyEvent.KEYCODE_DPAD_CENTER:
			mPreview.takePicture();
			break;
		}
    	return true;
    }
}  
    /*Preview-显示Preview*/
    class Preview extends SurfaceView implements SurfaceHolder.Callback{
    	
    	SurfaceHolder mHolder;
    	Camera mCamera;
    	Bitmap cameraBitmap;
    	
		public Preview(Context context) {
			super(context);
			//得到SurfaceHolder对象
			mHolder = getHolder();
			//添加回调函数
			mHolder.addCallback(this);
			//设置SurfaceHolder 的类型
			mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
		}
		
		//在Surface的大小发生改变时激发
		@Override
		public void surfaceChanged(SurfaceHolder holder, int format, int width,
				int height) {
			/*构建Camera.Parameters对相机的参数进行设置*/
			Camera.Parameters parameters = mCamera.getParameters();
			/*设置拍照的图片格式*/
			parameters.setPictureFormat(PixelFormat.JPEG);
			/*设置Preview(预览)的尺寸*/
			parameters.setPreviewSize(320, 480);
			mCamera.setParameters(parameters);
			/*开始预览*/
			mCamera.startPreview();
		}
		
		/*拍照片*/
		public void takePicture(){
			if (mCamera != null) {
				mCamera.takePicture(null, null, jpegCallback);
			}
		}
		/*拍照后输出图片*/
		private PictureCallback jpegCallback = new PictureCallback(){

			@Override
			public void onPictureTaken(byte[] data, Camera camera) {
				// TODO Handle JPEG image data
				//解码一个不可变的位图 从指定的字节数组
				cameraBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
				File myCaptureFile = new File("/sdcard/camera1.jpg");
				try {
					BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));
					//压缩位图到指定的OutputStream
					cameraBitmap.compress(Bitmap.CompressFormat.JPEG, 80, bos);
					//刷新此缓冲区的输出流
					bos.flush();
					//关闭此输出流并释放与此流有关的所有系统资源
					bos.close();
					/*将拍到的图片绘制出来*/
					//锁定画布
					Canvas canvas = mHolder.lockCanvas();
					canvas.drawBitmap(cameraBitmap, 0, 0, null);
					//绘制后解锁,绘制后必须解锁才能显示
					mHolder.unlockCanvasAndPost(canvas);
				} catch (Exception e) {
					e.getMessage();
				}
			}
		};
		
		//在创建Surface时激发
		@Override
		public void surfaceCreated(SurfaceHolder holder) {
			/*启动Camera*/
			mCamera = Camera.open();
			try {
				mCamera.setPreviewDisplay(holder);
			} catch (Exception e) {
				/*释放mCamera*/
				mCamera.release();
				mCamera = null;
			}
		}       
		
		//在销毁Surface时激发
		@Override
		public void surfaceDestroyed(SurfaceHolder holder) {
			/*停止预览*/
			mCamera.stopPreview();
			mCamera = null;
		}
    }


   最后大家不要忘记了加上权限声明
<uses-permission android:name="android.permission.CAMERA" />
	<uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />


  源码见附件
  • 大小: 37.9 KB
4
0
分享到:
评论

相关推荐

    Android/IOS打开手机相机设置头像

    1. **Android相机API**: - 在Android中,我们可以使用`Camera`类或`Camera2` API来访问和控制设备的相机。然而,由于`Camera`类已被弃用,现在推荐使用`Camera2` API,它提供了更高级别的控制和更好的性能。 - ...

    H5 调用android 相机拍照

    一个常见的需求是H5页面能够调用Android设备的相机进行拍照,以实现更丰富的用户体验。本知识点将详细阐述如何在H5中调用Android本地相机进行拍照,并确保在Android 5.0、6.0等不同版本系统上的兼容性。 首先,我们...

    android照相机应用源码

    本资源"android照相机应用源码"提供了一个可以直接运行的Android相机应用示例,这对于初学者和有经验的开发者来说都是一个宝贵的参考资料。 首先,我们需要了解Android相机API的基础知识。在Android 3.0(API级别11...

    android相机拍照程序

    总之,开发Android相机拍照程序需要理解Camera API,合理设置图片尺寸以适应不同设备,并处理好拍照的整个流程。通过优化和适配,我们可以创建出既满足功能需求,又能良好运行在各种设备上的拍照应用。

    CameraChecker:快速检查Android相机设置

    CameraChecker 与此应用程序一起快速检查Android相机设置! 使用这个有用的工具来应对难以处理的Android相机碎片。如何使用使用Gradle构建并安装到目标设备。 运行应用程序。

    android相机圆形框拍照,自定义拍照界面

    在Android平台上,开发一款应用,实现自定义相机功能并让拍照界面呈现出圆形拍摄框,是一项技术挑战。这个功能常用于创建类似Instagram或某些社交应用的个性化拍摄体验,让用户拍摄的照片中心区域聚焦为圆形,增强...

    android自定义相机带取景框

    以上是自定义带有取景框的Android相机的主要步骤和知识点,实际开发中可能需要根据具体需求进行更深入的定制,例如添加滤镜效果、人脸识别等功能。理解并掌握这些知识,将有助于你创建出更加个性化的相机应用。

    android的相机设置源码

    本文将深入探讨“android的相机设置源码”所涵盖的知识点,帮助开发者理解并掌握Android相机API的使用。 一、Android相机框架 Android系统提供了Camera API,分为两个版本:Camera1和Camera2。Camera1是早期的API...

    android自定义相机黑屏问题.doc

    在Android开发中,自定义相机是一项常见的需求,但往往伴随着各种设备兼容性问题。本文将深入探讨一个特定的问题——在某些设备(如HTC)上,自定义相机可能导致黑屏的现象,以及如何解决这个问题。 首先,问题的...

    android 照相机 demo

    android 照相机 demo android 照相机 demo android 照相机 demo android 照相机 demo android 照相机 demo android 照相机 demo

    android-Camera-Code.zip_android 相机_android 相机_camera_camera and

    `android-Camera-Code.zip`是一个实用的Android相机应用示例,涵盖了基本的相机预览、拍照和参数设置。通过学习和分析这个示例,开发者可以快速掌握Android相机功能的开发,为自己的应用添加丰富的相机特性。同时,...

    xamarin android相机使用实例源码及水印菜单

    以上是关于“Xamarin.Android相机使用实例源码及水印菜单”的主要知识点。通过学习和实践这个实例,开发者能够掌握如何在Xamarin环境中集成和定制相机功能,以及如何处理图像和添加水印,进一步提升应用的功能性和...

    Android相机源码

    这些信息对于理解和调整相机设置至关重要。 5. **CaptureRequest**: CaptureRequest是创建拍照或录像请求的关键类。开发者可以在这个请求中设置各种参数,如曝光时间、感光度、测光模式等,并通过...

    android 4.1 相机源码

    深入研究这些源码,开发者不仅可以理解Android相机系统的运行机制,还能学习到如何优化相机功能,开发自定义相机应用,或者为新的硬件平台编写适配器。这个压缩包提供的"Camerase4.1相机"文件应该包含上述提到的关键...

    Android相机调用和自定义相机Demo源码

    在Android开发中,相机功能是不可或缺的一部分,无论是用于拍摄照片还是录制视频,它都是移动应用中的常用特性。本文将深入探讨如何在Android中调用系统...希望这个Demo源码能帮助你更好地理解和实践Android相机功能。

    Android 相机、图库Demo

    总结,这个“Android 相机、图库Demo”是学习和实践Android相机和图库功能的好资源,涵盖了从启动系统服务到自定义相机界面,再到处理返回结果的各种技术点。开发者可以根据这些示例代码,快速地在自己的应用中集成...

    基于Android平台的 酷相机

    一、Android相机API基础 在Android中,相机功能主要通过`Camera`类和`Camera2` API来实现。`Camera`类是早期版本Android中的相机接口,虽然现在已经被`Camera2` API取代,但在许多旧设备上仍然广泛使用。`Camera2` ...

    Android 自定义相机 CameraDIY源码

    在Android平台上,自定义相机(CameraDIY)是开发者经常遇到的需求,特别是在创建涉及多媒体功能的...通过对这个项目的分析和学习,开发者可以深入了解Android相机API的使用,为自己的应用增添更多个性化的相机功能。

    android自定义相机连拍

    在Android平台上,自定义相机功能是一项常见的需求,尤其对于那些希望提供独特拍摄体验的应用开发者来说。本教程将探讨如何在Android应用中实现自定义相机的连拍功能,这对于摄影爱好者或者需要快速捕捉连续图像的...

Global site tag (gtag.js) - Google Analytics