Camera学习,实现简单的相机App得到demo

1、首先得加入权限,其中清单文件如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mycamera"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />
	<uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.mycamera.MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="landscape"
             >

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

  2、main_xml文件,

android:layout_weight="0"是显示的权限,越大权限越小,这是线性布局里起效
<LinearLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
    	xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        tools:context="com.example.mycamera.MainActivity$PlaceholderFragment"
         >
    <SurfaceView
        android:layout_weight="100"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
       	android:id="@+id/camera"
		 />
    <RelativeLayout 

        android:layout_weight="0"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        >
	<Button
	    android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="拍照"
        android:layout_alignParentRight="true"
        android:id="@+id/pz"
        android:onClick="paizhao"
	    />
	<Button
	    android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="对焦"
        android:id="@+id/dj"
        android:layout_toLeftOf="@+id/pz"
        android:onClick="duijiao"
	    />
	</RelativeLayout>
	</LinearLayout>

  3、实现代码,其中观看相机硬件参数的结果时候是密密麻麻的为了方便观看结果可以看我的这篇博客:http://www.cnblogs.com/bokeofzp/p/4743108.html

public class MainActivity extends ActionBarActivity {//ActionBarActivity

	private SurfaceView sv;
	private SurfaceHolder holder;
	private Camera mCamera;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//去掉信息栏
        setContentView(R.layout.activity_main);
        sv=(SurfaceView) findViewById(R.id.camera);
        holder=sv.getHolder();
        holder.addCallback(new MyCallback());
    }

    public void duijiao(View v)
    {
    	//自动对焦
    	mCamera.autoFocus(null);

    }
    public void paizhao(View v) throws IOException
    {
    	//拍照
    	mCamera.takePicture(null, null, new MyPictureCallback() );
    }

    class MyPictureCallback implements  PictureCallback
    {
		@Override
		public void onPictureTaken(byte[] data, Camera camera) {
			//dada就是拍照后压缩的数据
			File image=new File(Environment.getDataDirectory(),"zp.jpg");
			FileOutputStream out=null;
			try {
				 out=new FileOutputStream(image);
				out.write(data);
				out.flush();
				out.close();
			} catch (Exception e) {
				e.printStackTrace();
				Toast.makeText(MainActivity.this, "保存照片失败!", Toast.LENGTH_LONG).show();
			}
			finally
			{
				mCamera.startPreview();
			}
		}

    }

class MyCallback implements Callback
{

	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		//初始化相机
		mCamera=Camera.open();
		MainActivity.this.holder=holder;
		//获取相机支持的所有参数
		 //获取相机支持的所有参数,这里获取的相机信息都打在一起,可以复制到word里面,点击crlt+h将所有的";
		//"替换成换行符,点进”替换为“后,在替换界面点击“更多”,然后点击"特殊格式",选择“手动换行符”,这样
		//可以将所有参数信息一行行显示,具体方法可以参见我的另外一篇博客:http://www.cnblogs.com/bokeofzp/p/4743108.html
//		System.out.println(mCamera.getParameters().flatten());

		//得到相机参数后,根据相机支持的参数来设置自定义相机的参数
		Camera.Parameters parms=mCamera.getParameters();
		parms.setPictureFormat(ImageFormat.JPEG);//设置图片的格式

		try {
			mCamera.setPreviewDisplay(holder);
		} catch (IOException e) {
			e.printStackTrace();
		}
		mCamera.startPreview();
	}

	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		mCamera.release();
		mCamera=null;
	}

}
}

  

  

时间: 2024-11-09 10:32:22

Camera学习,实现简单的相机App得到demo的相关文章

[Android]实现简单的相机程序

好久没写了,有些东西做过都快忘了,赶紧记一下. 现在来实现一个简单的相机程序. 原文地址http://www.cnblogs.com/rossoneri/p/4246134.html 当然需要的话可以直接调用系统的camera程序,但自己实现会使用更自由. 呐,既然要用实现相机,那就需要先了解一下调用camera的类android.hardware.camera android.hardware.Camera The Camera class is used to set image captu

打造支持apk下载和html5缓存的 IIS(配合一个超简单的android APP使用)具体解释

为什么要做这个看起来不靠谱的东西呢? 由于刚学android开发,还不能非常好的熟练控制android界面的编辑和操作,所以我的一个急着要的运用就改为html5版本号了,反正这个运用也是须要从server获取大量数据来展示在手机上面的,也就是说:必须联网,才干正常工作,于是想了一下,反正都要联网获取数据,为什么不直接用我相对熟悉一点的 html来做这个运用呢?省的花费不够用的时间去学习android界面的控制,于是就简单了:用蹩脚的手段做了一个android程序的启动欢迎界面,内页就是一个全屏的

unity3d简单的相机跟随及视野旋转缩放

1.实现相机跟随主角运动 一种简单的方法是把Camera直接拖到Player下面作为Player的子物体,另一种方法是取得Camera与Player的偏移向量,并据此设置Camera位置,便能实现简单的相机跟随了. 这里我们选取第二种方法,首先给Camera添加一个脚本,取名为FollowPlayer,脚本很简单不做说明了 1 public class FollowPlayer : MonoBehaviour { 2 3 private Transform player; 4 private V

android camera 学习

总体介绍 Android Camera框架从整体上看是一个client/service架构.有两个进程,一个是client进程,可以看成AP端 ,主要包括Java代码和一些native层的c/c++代码:另一个是service进程,属于服务端,是native c/c++代码, 主要负责和linux kernel中的camera driver交互,搜集linux kernel中driver层传上来的数据,并交给显示系统(surface)显示.client 和 service 进程通过Binder机

(java)selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出

selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出: 该情况适合能能循环page=1~n,并且每个网页随着循环可以打开的情况, 注意一定是自己拼接的url可以打开,如:http://ask.testfan.cn/articles?page=15,就可以翻到文章分类的第15页: import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.u

mjson学习的简单例子分享

01#include <mjson/json.h>02#include <stdio.h>03#include <stdlib.h>04int main()05{06    json_t *entry, *root, *head, *body, *label, *value;07    char *document;08    root = json_new_object();09     10    /*--------Head------*/11 12    hea

android最简单手机地图APP(只需5分钟)

android最简单手机地图APP--只有三部分. 第一部分 首先建立一个MapActivity在setContentView(R.layout.activity_map);中创建一个<WebView>代码如下. <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/and

Java研究之学习设计模式-简单工厂模式详解

 简介: 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 类图: 从UML类图中,可以看出,简单工厂模式的意思,就是把一个类内部,需要生成的部分,提取出来,变为一个工厂,通过工厂来new对象. 假设我们要吃苹果了,我们可以在代码中new一个苹果出来:当我们需要吃香蕉了,我们在代码中new一个香蕉出来.这种做法你会不会觉得麻烦

跟着ZHONGHuan学习设计模式--简单工厂

转载请注明出处!!!http://blog.csdn.net/zhonghuan1992 所有配套代码均在github上:https://github.com/ZHONGHuanGit/DesignPattern 跟着ZHONGHuan学习设计模式 简单工厂 简介: 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.   类图: 从