/* * Android开发之初识camera图像采集 * 北京Android俱乐部群:167839253 * Created on: 2011-8-24 * Author: blueeagle * Email: [email protected] */ 下面记录一个简单的相机的制作方法。 制作相机,首先需要添加照相的权限。添加方法是在AndroidManifest.xml文件中添加 <uses-permission android:name=” android.permission.CAMERA”>即可。 其次:修改布局文件:如下代码所示。 <textarea readonly name="code" class="html"><?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <SurfaceView android:id = "@+id/mySurfaceView" android:layout_width="320px" android:layout_height="240px"> </SurfaceView> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" > <Button android:id="@+id/myButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="打开"/> <Button android:id="@+id/myButton2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="关闭"/> </LinearLayout> </LinearLayout> </textarea>再次,编辑代码,如下所示: <textarea readonly name="code" class="java">/* * Android开发之camera图像采集 * MyTestCamera.java * Created on: 2011-8-24 * Author: blueeagle * Email: [email protected] */ package com.blueeagle; import java.io.IOException; import android.app.Activity; import android.hardware.Camera; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.widget.Button; public class MyTestCamera extends Activity implements SurfaceHolder.Callback{ Camera myCamera; SurfaceView mySurfaceView; SurfaceHolder mySurfaceHolder; Button myButton1; Button myButton2; boolean isPreview = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mySurfaceView = (SurfaceView)findViewById(R.id.mySurfaceView); myButton1 = (Button)findViewById(R.id.myButton); myButton2 = (Button)findViewById(R.id.myButton2); mySurfaceHolder = mySurfaceView.getHolder(); mySurfaceHolder.addCallback(this); mySurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); myButton1.setOnClickListener(new Button.OnClickListener(){ @Override public void onClick(View v) { initCamera(); } }); myButton2.setOnClickListener(new Button.OnClickListener(){ @Override public void onClick(View v) { if(myCamera!=null&&isPreview){ myCamera.stopPreview(); myCamera.release(); myCamera = null; isPreview = false; } } }); } public void initCamera() { // TODO Auto-generated method stub if(!isPreview){ myCamera = Camera.open(); } if(myCamera !=null && !isPreview){ try{ myCamera.setPreviewDisplay(mySurfaceHolder); myCamera.startPreview(); } catch(IOException e){ e.printStackTrace(); } isPreview = true; } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } @Override public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub } } </textarea><br> 如果在模拟器中运行,可以得到如图所示的情形。如果在真机上运行,则会打开摄像头,将实际的影响显现出来。关闭时,则定在关闭时的画面。这样基本可以完成了图像的采集。如果程序中对相机有要求的话,可以采用这种方式进行。 <img src="http://hi.csdn.net/attachment/201108/24/0_1314193114Jhd0.gif" > 这个例子只是一个小demo。供深入学习参考用。 <br>
好文章 :假如你喜欢一位码农小帅哥
时间: 2024-12-06 01:33:42