`
Aina_hk55HK
  • 浏览: 388195 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Android Camera照相机

阅读更多
package com.Aina.Android;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

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.util.Log;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

/**
 * com.Aina.Android Pro_Camera
 * 
 * @author Aina.huang E-mail: 674023920@qq.com
 * @version 创建时间:2010 Jul 7, 2010 2:50:15 PM 类说明
 */
public class PreView extends SurfaceView implements SurfaceHolder.Callback {

	private SurfaceHolder holder = null;
	private Camera mCamera = null;
	private Bitmap mBitmap = null;

	public PreView(Context context) {
		super(context);
		Log.i("TAG", "PreView()");
		// TODO Auto-generated constructor stub
		holder = this.getHolder();
		holder.addCallback(this);
		holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
	}

	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {
		Log.i("TAG", "surfaceChanged");
		// TODO Auto-generated method stub
		Camera.Parameters parameters = mCamera.getParameters();
		parameters.setPictureFormat(PixelFormat.JPEG);//设置图片格式
		parameters.setPreviewSize(320, 480);//设置尺寸
//		parameters.setPictureSize(320, 480);//设置分辨率
		mCamera.setParameters(parameters);
		mCamera.startPreview();//开始预览
	}

	public void surfaceCreated(SurfaceHolder holder) {
		Log.i("TAG", "surfaceCreated");
		// TODO Auto-generated method stub
		mCamera = Camera.open();//启动服务
		try {
			mCamera.setPreviewDisplay(holder);//设置预览
		} catch (IOException e) {
			mCamera.release();//释放
			mCamera = null;
		}
	}

	public void surfaceDestroyed(SurfaceHolder holder) {
		Log.i("TAG", "surfaceDestroyed");
		// TODO Auto-generated method stub
		mCamera.stopPreview();//停止预览
		mCamera = null;
	}

	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if(keyCode==KeyEvent.KEYCODE_DPAD_CENTER){
			if(mCamera !=null){
				mCamera.takePicture(null, null,pic);
			}
		}
		return super.onKeyDown(keyCode, event);
	}
	//拍照后输出图片
	public Camera.PictureCallback pic = new Camera.PictureCallback(){

		public void onPictureTaken(byte[] data, Camera camera) {
			// TODO Auto-generated method stub
			mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
			File f = new File(android.os.Environment.getExternalStorageDirectory()+"/camera1.jpg");
			try {
				BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(f));
				mBitmap.compress(Bitmap.CompressFormat.JPEG, 80, os);
				os.flush();
				os.close();
				Canvas canvas = holder.lockCanvas();
				canvas.drawBitmap(mBitmap, 0, 0, null);
				holder.unlockCanvasAndPost(canvas);
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	};
}



package com.Aina.Android;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Window;

public class Test extends Activity {
    /** Called when the activity is first created. */
	private PreView pv = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        pv = new PreView(this);
        setContentView(pv);
    }

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		return pv.onKeyDown(keyCode, event);
	}
    
}


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.Aina.Android"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Test"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
 <uses-permission android:name="android.permission.CAMERA" /> 
 <uses-feature android:name="android.hardware.camera" /> 
 <uses-feature android:name="android.hardware.camera.autofocus" />

</manifest> 
分享到:
评论
7 楼 dai_lm 2012-07-12  
官方文档的说明
“Exception that is thrown from lockCanvas() when called on a Surface whose type is SURFACE_TYPE_PUSH_BUFFERS. ”

所以只能吧lockCanvas()那3句话删除
6 楼 ihopethatwell 2012-04-24  
楼主,我在你的这例子:FrameLayout fl = new FrameLayout(this);
pv = new PreView(this);
fl.addView(pv);
Button sureBtn = new Button(this);
sureBtn.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
sureBtn.setBackgroundColor(R.color.white);
sureBtn.setText("确定");
sureBtn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
pv.doTakePic();
}
});
fl.addView(sureBtn);

setContentView(fl);

但是点击拍照的时候却: android.view.SurfaceHolder$BadSurfaceTypeException: Surface type is SURFACE_TYPE_PUSH_BUFFERS 怎么办?
5 楼 yuky1327 2012-03-23  
03-23 12:30:58.386: E/AndroidRuntime(18502): FATAL EXCEPTION: main
03-23 12:30:58.386: E/AndroidRuntime(18502): android.view.SurfaceHolder$BadSurfaceTypeException: Surface type is SURFACE_TYPE_PUSH_BUFFERS
03-23 12:30:58.386: E/AndroidRuntime(18502): at android.view.SurfaceView$3.internalLockCanvas(SurfaceView.java:761)
03-23 12:30:58.386: E/AndroidRuntime(18502): at android.view.SurfaceView$3.lockCanvas(SurfaceView.java:752)
03-23 12:30:58.386: E/AndroidRuntime(18502): at cn.camera.PreView$1.onPictureTaken(PreView.java:107)
03-23 12:30:58.386: E/AndroidRuntime(18502): at android.hardware.Camera$EventHandler.handleMessage(Camera.java:502)

楼主的代码运行之后会出现这个错误,请问怎么解决?
4 楼 xiebaolong 2011-03-30  
楼主确实很牛~~
3 楼 咖啡舞者 2011-02-12  
对KEYCODE_CAMERA进行监听可否?
如何第一阶进行对焦、彻底按下后拍照?(摄像按钮是分两阶的)
谢谢。
2 楼 yehoubin 2010-10-29  
你好,可以发个可以运行的例子给我吗?谢谢!yehoubin1987@163.com
1 楼 westice 2010-08-13  

看楼主对android蛮有研究的,请教一下。
我需要从摄像头得到连续的视频帧,用到了previewcallback这个回调,在模拟器中还是可以正常调用匿名内部类的方法,但是在真机里就一次也不执行了,这是什么原因,手机问题吗?有别的方法可以解决我的问题吗?谢了!

camera.setPreviewCallback(new Camera.PreviewCallback() {
			
			public void onPreviewFrame(byte[] data, Camera camera) {
				// TODO Auto-generated method stub
				  count ++;
			      char[] debuginfo = new char[20];
			      String s = "sendimage:"+Integer.toString(count);
			      debuginfo = s.toCharArray();
			      debugtext.setText(debuginfo, 0, debuginfo.length);
				   
			}
});


相关推荐

    Android Camera问题资料

    5. **Android Camera照相机 - Android - JavaEye技术网站**: 这份MHT文件可能是JavaEye社区中关于Android Camera的讨论或教程,可能涵盖了用户反馈的问题、最佳实践或者特定场景下的优化策略。 6. **Emulator's ...

    android4.0 Camera照相机 源代码

    总之,这个“android4.0 Camera照相机 源代码”压缩包提供了Android 4.0时代相机功能实现的详细示例,对于深入学习Android Camera API和开发相关应用具有很高的参考价值。通过研究这些源代码,开发者能够更好地理解...

    android 简易camera照相机

    这个"android 简易camera照相机"项目旨在提供一个基础的拍照和预览功能。下面将详细解释如何实现这些功能,以及涉及到的关键知识点。 首先,Android中的Camera API分为两代:Camera API1和Camera API2。Camera API1...

    Android Camera1 Demo - 实现预览、拍照、录制视频功能

    由于工作中需要用到Camera1,所以花了两天时间研究了以下,使用Android Camera1 API实现了相机预览、拍照和录制视频的功能。 资源中有个MyCamera1Demo.apk可以直接安装运行,MyCamera1Demo.zip是Demo源码。 具体详见...

    android4.0 camera 照相机代码jar包

    本压缩包文件“android4.0 camera 照相机代码jar包”包含了与Android 4.0相机相关的类库,方便开发者快速集成和自定义相机功能。下面将详细解释这些知识点。 1. **Android Camera API**: - 在Android 4.0之前,...

    Android Camera架构及源码解析

    自己总结的Android Camera系统架构及源码分析,以framework和hal为主。

    android照相机源码camera

    在Android系统中,照相机功能是用户日常使用的重要部分,对于开发者来说,理解其源码有助于定制和优化相机应用。Android 4.0(Ice Cream Sandwich,简称ICS)的相机源码提供了丰富的学习材料,揭示了相机服务如何与...

    Android调用Camera实现拍照--github地址

    这是github的项目源码地址。Android Studio2.3.3调用系统的Camera实现拍照功能,并将照片保存到本地内存卡中

    android Camera自动拍照、自动对焦并获取指定大小图片

    1.首先android6.0以上版本要动态申请相机和文件读写权限 2.废话不啰嗦,上代码: /** * 摄像头画面采集界面 */ public class DistinguishActivity extends BaseActivity implements SurfaceHolder.Callback, ...

    Android4.0.3照相机源码

    Android系统的照相机服务主要由`system/core/services/camera`目录下的代码实现,它作为系统服务运行在SystemServer进程中,提供给应用程序通过 Binder 通信接口进行调用。这个服务处理来自多个应用的相机请求,确保...

    android 照相机源码 Camera源码

    在Android系统中,照相机功能是用户日常使用的重要部分,深入了解Android照相机的源码有助于开发者优化拍照体验、实现自定义功能或者解决相关问题。本文将深入探讨Android照相机源码,涵盖其核心组件、工作流程以及...

    android camera out of memory安卓照相机OOM问题的解决

    如果不能使用,请修改根目录下的project.property的android:target为你当前有的target(不知道怎么改的同学可以从8到21一个个数字去试哦) 程序实现点击屏幕后聚焦拍照功能,并把图片存入sd卡camera目录下。但打开时无...

    Android4.42照相机 Camera2源码

    在Android系统中,Camera2 API是自Android 5.0(API级别21)开始引入的一个新特性,它为开发者提供了更底层、更强大的相机控制能力。相较于早期的Camera API,Camera2 API允许开发者实现更专业级的摄影功能,如手动...

    delphi xe5 android 调用照相机摄像头拍照片camera

    在使用Delphi XE5开发Android应用程序时,调用照相机功能是常见的需求,以便让用户拍摄照片并集成到应用中。本示例着重讲解如何在Delphi XE5环境下,利用Android API来实现这一功能,无需额外的组件,只通过原生代码...

    Android 照相机 Camera

    ### Android照相机Camera知识点详解 #### 一、Android照相机Camera概述 自Android OS 2.0版本开始,Google提供了官方支持的照相API,这为开发者提供了开发自定义照相机应用的可能性。到了Android OS 2.3版本,...

    Android照相机触屏对焦例子

    这个"Android照相机触屏对焦例子"将引导我们了解如何实现这一功能。Android提供了丰富的API来支持摄像头操作,包括触屏对焦。我们将深入探讨以下几个关键知识点: 1. **Camera API与Camera2 API**: Android提供了...

    android 照相机 demo

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

    android4.0camera源码

    在Android 4.0(Ice Cream Sandwich)系统中,Camera模块是系统的重要组成部分,它为开发者提供了丰富的功能,包括拍照、录制视频、设置参数等。本文将深入探讨Android 4.0 Camera源码中的关键知识点。 一、Camera...

    android 调用照相机拍照

    在Android平台上,调用照相机拍照是常见的功能之一,它涉及到多媒体处理、用户交互以及硬件接口的使用。本文将深入探讨如何在Android应用中实现这一功能,并特别关注对焦优化。 首先,调用照相机拍照的基本流程是...

    Android自定义照相机 预览拍照 切换前后置摄像头

    Android提供了两个主要的相机API:Camera API1(在API level 9引入)和Camera2 API(在API level 21引入)。由于Camera API1已过时,且存在许多限制,现在我们主要关注Camera2 API,它是现代Android相机开发的核心。...

Global site tag (gtag.js) - Google Analytics