Android开发之初识Camera图像采集

/*

* 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&amp;&amp;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 &amp;&amp; !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>

好文章 :假如你喜欢一位码农小帅哥

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。