`

简单拍照的实现

 
阅读更多
public class Main extends Activity implements SurfaceHolder.Callback,// 界面改变接口
		AutoFocusCallback, // 自动对焦接口
		PictureCallback // 处理照片回调接口
{
	private static final String TAG = "TakeActivity";
	private SurfaceView surfaceView;
	private Camera camera;
	private boolean isboolean;
	int w, h;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Window window = getWindow();
		requestWindowFeature(Window.FEATURE_NO_TITLE);// 没有标题
		window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);// 没有信息栏
		window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);// 高亮

		setContentView(R.layout.main);
		WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
		Display display = wm.getDefaultDisplay();
		w = display.getWidth();
		h = display.getHeight();
		System.out.println("宽高=" + w + "*" + h);
		surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView);
		// 分辨率的设置为固定的值:176*144,320*240,352*288,480*360,640*480
		surfaceView.getHolder().setFixedSize(320, 240); // 设置分辨率
		/* 下面设置Surface不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前 */
		surfaceView.getHolder()
				.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);// 必须设置,虽然已经过时了
		surfaceView.getHolder().addCallback(this);// 回调

	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (camera != null && event.getRepeatCount() == 0) {
			switch (keyCode) {
			case KeyEvent.KEYCODE_SEARCH:// 按下搜索键,拍照
				camera.autoFocus(null);// 自动对焦,必须放在startPreview()和stopPreview()之间
				// 开始拍照
				camera.takePicture(null,// 拍照瞬间调用
						null, // 获得没有压缩过的图片数据
						this// 返回处理后的图片数据
						);// 通过handler异步实现拍照
				break;
			}
		}
		return true;// 注意这边没有将事件继续往下传递
	}

	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {// 在界面尺寸改变时被调用,设置相机的参数(大小,格式)
		Camera.Parameters param = camera.getParameters();
		param.setPreviewFrameRate(3);// 每秒3帧,每秒从摄像头中取3帧画面
		param.setPictureFormat(PixelFormat.JPEG);// 设置照片的输出格式
		param.set("jpeg-quality", 85);// 照片质量
		/* 参数不要设置,否则报错,不知道什么原因,不设置将采用默认值 */
		// param.setPreviewSize(h, w);// 设置预览照片的大小
		// param.setPictureSize(h, w);// 设置照片的大小为手机的屏幕
		camera.setParameters(param);
	}

	@Override
	public void surfaceCreated(SurfaceHolder holder) {// 界面创建时被调用,一般是用来,打开相机,设置预览
		try {
			camera = Camera.open();// 不能放在构造函数里,否则产生不了预览效果
			camera.setPreviewDisplay(surfaceView.getHolder());// 通过SurfaceView显示取景画面
			camera.startPreview();// 开始预览
			isboolean = true;
		} catch (IOException e) {
			Log.e(TAG, e.toString());
		}
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		// TODO Auto-generated method stub
		if (camera != null) {
			if (isboolean) {
				camera.stopPreview();// 关闭预览
				camera.release();// 释放相机
			}
		}
	}

	// 创建位图,并保存到sd卡,以系统时间作为文件名
	@Override
	public void onPictureTaken(byte[] data, Camera camera) {
		// TODO Auto-generated method stub
		try {
			Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
			String path = Environment.getExternalStorageDirectory()
					.getAbsolutePath()
					+ File.separator + "mobileoa" + File.separator + "photo";
			File file = new File(path, System.currentTimeMillis() + ".jpg");// 保存到sd卡
			FileOutputStream outStream = new FileOutputStream(file);
			bitmap.compress(CompressFormat.JPEG, 100, outStream);
			outStream.close();
			camera.stopPreview();
			camera.startPreview();// 开始预览
		} catch (Exception e) {
			Log.e(TAG, e.toString());
		}
	}

	// 自动对焦
	@Override
	public void onAutoFocus(boolean success, Camera camera) {
		// TODO Auto-generated method stub

	}

	public boolean onTouchEvent(MotionEvent event) {
		if (camera != null) {
			camera.takePicture(null, null, this);
		}
		return true;
	}

}

 

分享到:
评论

相关推荐

    C#实现摄像头拍照功能

    通过以上步骤,一个简单的C#摄像头拍照应用就实现了。这个项目对于初学者来说是很好的实践,因为它涵盖了C# GUI编程、设备访问、事件处理和图像处理等多个知识点。同时,对于开发者来说,它也可以作为一个基础模块,...

    C#实现手持机自动拍照

    可以创建一个简单的用户界面,显示实时预览,并显示拍照状态。按钮和指示器可以帮助用户理解程序的状态,虽然在这个场景下我们希望避免用户手动干预。 在提供的压缩包文件中,"www.pudn.com.txt"可能是介绍相关资源...

    C#实现摄像头拍照

    在C#编程环境中,利用Visual ...通过以上步骤,开发者可以创建一个简单的C#摄像头拍照应用。在实际项目中,可能还需要考虑更多的细节,比如添加多摄像头支持、调整图像质量、添加实时滤镜等功能,以满足更复杂的需求。

    调用摄像头实现不预览拍照,后台拍照

    在Android开发中,有时我们可能需要在应用中实现一个功能,即不显示预览界面而直接调用摄像头进行拍照。这种需求通常出现在那些对界面有特殊要求或者希望简化用户交互的小型项目中。本篇文章将深入探讨如何在Android...

    C#实现在线拍照

    网上找了很多都是利用iis发布实习flash与aspx的通信,后来去goole找到了个很好的实现在线拍照的例子速度很快很好用、简单,不用发布即实现了flash和.net的数据传输。可以在save_picture.fla中改变所拍照片大小。可以...

    android 不预览拍照 后台拍照

    在Android开发中,有时我们需要实现一些特殊的相机功能,比如...这个简单的示例展示了如何在后台实现不预览拍照、转换照片方向以及保存到SD卡的基本流程。在实际开发中,还需考虑错误处理、性能优化、内存管理等问题。

    android 实现拍照功能

    在Android平台上,实现拍照功能是常见的应用场景,例如社交应用、生活记录类应用等。这个"android 实现手机拍照 可直接部署使用"的项目,很可能包含了一个完整的Android应用示例,教你如何集成并使用Android的Camera...

    利用Aforge实现拍照

    在本场景中,我们将关注如何利用AForge来实现简单的拍照功能。 首先,你需要在你的项目中引入AForge.NET的库。可以通过NuGet包管理器来安装,或者直接从AForge官方网站下载源代码并添加到项目中。安装完成后,你就...

    html5实现摄像头拍照并使用java进行照片保存

    在本文中,我们将深入探讨如何使用HTML5实现摄像头拍照功能,并结合Java技术将拍摄的照片保存到服务器。HTML5的WebRTC(Real-Time Communication)API为我们提供了访问用户设备摄像头的能力,而Java作为后端语言,...

    Android开发之拍照功能实现(附源码)

    在Android应用开发中,集成拍照功能是一项常见的需求,无论是在社交应用、图片...通过学习和理解这段代码,你可以更好地掌握Android中拍照功能的开发,无论是简单的拍照按钮,还是复杂的相机参数调整,都能轻松应对。

    Android实现调用摄像头拍照与视频功能

    下面是一个简单的示例代码,演示如何在 Android 中调用摄像头拍照和录视频功能: ```java public class CameraActivity extends Activity { private Camera camera; private Button takePictureButton; private ...

    使用opencv+vs实现电脑拍照

    在本文中,我们将深入探讨如何使用OpenCV库与Visual Studio(VS)集成,来实现一个简单的电脑拍照功能。OpenCV(开源计算机视觉库)是一个强大的跨平台库,它提供了多种图像处理和计算机视觉功能,而Visual Studio则...

    jQuery实现图片取景器仿相机拍照功能的插件photoShoot

    《jQuery实现图片取景器仿相机拍照功能的插件photoShoot详解》 在现代Web开发中,模拟真实设备的功能越来越受到重视,其中尤以模拟相机拍照功能为热门。jQuery作为一个强大的JavaScript库,提供了丰富的API和插件...

    Android拍照,连拍以及自动拍照

    在Android平台上,拍照功能是移动...拍照功能的实现涉及多个层次,从简单调用系统相机到自定义相机设置,都需要根据实际需求进行选择和实现。在开发过程中,务必测试各种设备和Android版本,确保功能的稳定性和兼容性。

    Android调用系统相机、相册实现拍照、图片多选Demo移动开发

    最后,AddImageDemo这个项目名可能是这个功能的示例代码,包含了一个简单的实现,开发者可以通过查看源代码学习如何集成这些功能到自己的应用中。记住,良好的代码组织和注释可以使代码更易理解和维护。 总之,...

    简单 camera 拍照 预览

    在Android平台上,...在RectPhoto这个项目中,我们可以期待看到一个简单的实现,包括相机预览、拍照和可能的基础图像处理功能。通过理解这些知识点,开发者可以进一步扩展功能,如添加滤镜、多张连拍、视频录制等。

    Android:实现手机拍照并保存照片

    通过这个过程,我们可以从头开始构建一个简单的相机应用,允许用户拍照并保存到SD卡上。在实际开发中,可能还需要考虑更多细节,比如处理相机旋转、优化图片质量、支持前置摄像头、处理拍照错误等。

    VFP调用API来控件USB摄像头,实现拍照或录像

    在本文中,我们将深入探讨如何使用Visual FoxPro(VFP)调用API来控制USB摄像头,从而实现拍照和录像功能。API(Application Programming Interface)是一组预定义的函数,允许程序与操作系统或其他软件进行交互。在...

    在html5网页中实现用手机相机拍照功能,并上传照片给后台.zip

    在HTML5中,实现手机相机拍照并上传照片给后台的功能主要涉及到两个关键API:`<input type="file">`的`capture`属性和File API。下面将详细介绍这两个知识点及其相关应用。 1. `<input type="file">`与`capture`...

    拍照并且截图,最简单的一个demo

    本示例("拍照并且截图,最简单的一个demo")旨在介绍如何在开发过程中实现这一功能。通过分析提供的文件名"TestDetailDemo",我们可以推测这是一个测试详细演示的代码示例,可能包含实现拍照和截图功能的关键代码...

Global site tag (gtag.js) - Google Analytics