`
rayln
  • 浏览: 424466 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Camera摄像头拍照

 
阅读更多
请看例子:
main.xml
<?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"
    >
    <Button android:layout_width="match_parent" android:text="打开按钮" android:id="@+id/button1" android:layout_height="wrap_content"></Button>
    <Button android:layout_width="match_parent" android:text="关闭按钮" android:id="@+id/button2" android:layout_height="wrap_content"></Button>
    <Button android:layout_width="match_parent" android:text="拍照按钮" android:id="@+id/button3" android:layout_height="wrap_content"></Button>
	<SurfaceView android:id="@+id/mySurfaceView" 
		android:gravity="center_horizontal" android:layout_width="fill_parent"
		android:layout_height="300px" />
	<ImageView android:id="@+id/myImageView"
		android:layout_width="fill_parent" android:layout_height="300px" />
</LinearLayout>



AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.test"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".TestActivity" 
                  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>



TestActivity.java主文件
package com.test;

import java.io.IOException;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;

public class TestActivity extends Activity implements Callback, OnClickListener {
    /** Called when the activity is first created. */
    SurfaceView mySurfaceView;// SurfaceView的引用
    SurfaceHolder mySurfaceHolder;// SurfaceHolder的引用
    Button button1;// 打开按钮
    Button button2;// 关闭按钮
    Button button3;// 拍照按钮
    Camera myCamera;// Camera的引用
    boolean isView = false;// 是否在浏览中
    @Override
    public 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.main);
        button1 = (Button) findViewById(R.id.button1);
        button2 = (Button) findViewById(R.id.button2);
        button3 = (Button) findViewById(R.id.button3);
        button1.setOnClickListener(this);
        button2.setOnClickListener(this);
        button3.setOnClickListener(this);
        mySurfaceView = (SurfaceView) findViewById(R.id.mySurfaceView);
        mySurfaceHolder = mySurfaceView.getHolder();              //此对象用于在Camera和SurfaceView之间传递数据
        mySurfaceHolder.addCallback(this);                                 
        mySurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    public void initCamera() {               //初始化相机
        if (!isView) {
            myCamera = Camera.open(); 
        }
        if (myCamera != null && !isView) {
            try {
                Camera.Parameters myParameters = myCamera.getParameters();
                myParameters.setPictureFormat(PixelFormat.JPEG);              //设置照片格式
                myParameters.set("orientation", "portrait");
//                myParameters.setPreviewSize(dm.widthPixels/2,dm.heightPixels/2);                                //大小
                myCamera.setParameters(myParameters);        
                myCamera.setPreviewDisplay(mySurfaceHolder);      
                myCamera.startPreview();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            isView = true;
        }
    }
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if(v==button1){
            initCamera();
        }else if(v==button2){
            isView=false;
            myCamera.stopPreview();
            myCamera.release();
            myCamera=null;
        }else if(v==button3){
            myCamera.takePicture(mShutterCallback, myRawCallback, myjpegCallback);      //进行照相
        }
    }

    ShutterCallback mShutterCallback = new ShutterCallback() {
        @Override
        public void onShutter() {
            // TODO Auto-generated method stub
        }
    };

    PictureCallback myRawCallback = new PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            // TODO Auto-generated method stub
        }
    };
    PictureCallback myjpegCallback = new PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {               //将照下来的图片用ImageView显示
            // TODO Auto-generated method stub
            Bitmap bm=BitmapFactory.decodeByteArray(data, 0, data.length);
            ImageView myImageView=(ImageView) findViewById(R.id.myImageView);
            myImageView.setImageBitmap(bm);
            isView=false;
            myCamera.stopPreview();
            myCamera.release();
            myCamera=null;
            initCamera();
        }
    };

    @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
    }
}
分享到:
评论

相关推荐

    Flex实现Camera摄像头在线拍照功能

    在探讨“Flex实现Camera摄像头在线拍照功能”这一主题时,我们深入分析了如何利用Adobe Flex框架结合Camera组件来实现在线拍照的功能。Flex是一种强大的RCP(Rich Client Platform)开发工具,由Adobe Systems开发,...

    usb2.0 camera摄像头驱动 支持win7

    usb2.0 camera 摄像头驱动是一款万能的摄像头驱动程序,几乎支持市面上所有的摄像头型号,支持win7、win8和64位操作系统。usb2.0 camera驱动使用说明64位系统必须运行UniversalThemePatcher-x64.exe。需要管理员权限...

    camerax录像,拍照,切换摄像头

    本篇文章将深入探讨如何使用Camerax进行录像、拍照以及切换摄像头的操作。 首先,我们需要理解Camerax的基本概念。Camerax是Android Jetpack的一部分,它提供了一个高层次的抽象层,使开发者可以更容易地访问和控制...

    Delphi摄像头Camera拍照抓图程序.rar

    Delphi摄像头Camera拍照抓图程序,程序窗口的实现使用了三方控件。在摄像头操控方面,可打开摄像头,抓取图像为图片格式并保存,预览所要抓取的照片,可设置相片尺寸,可将抓取的照片修饰成艺术照片、证件照片等。

    C#调用AForge控制USB摄像头进行拍照录像

    本教程将深入探讨如何利用C#和AForge.NET库来控制USB摄像头进行拍照和录像。 首先,我们需要在C#项目中引用AForge库。这可以通过NuGet包管理器完成,搜索"AForge.Video"和"AForge.Video.DirectX",然后安装这两个包...

    USBCamera多摄像头同时预览打开

    支持USB摄像头的android代码,UVC协议谁信那个头,USBCamera多摄像头同时预览打开。 可以复用里面的代码进行更多的摄像头打开,只要带宽足够,可以打开多个。 测试环境: macOS Catalina 版本10.15.7 Android Studio...

    CameraApp摄像头调用和设备

    `Camera`类较为简单,适合基础的拍照和录像功能,而`Camera2` API则提供了更高级的功能,如手动对焦、曝光控制等,适合专业级别的图像处理需求。 调用摄像头的基本步骤如下: 1. 检查权限:在Android 6.0及以上版本...

    嵌入式linux下QT开发 Camera摄像头采集视频源码

    在嵌入式Linux环境下,使用QT进行Camera摄像头采集视频的开发是一项常见的任务,尤其是在物联网、智能家居、自动驾驶等领域的应用中。QT是一个强大的图形用户界面框架,而Camera接口则提供了访问和控制摄像头的能力...

    android Camera摄像头开发必备源码

    本资源"android Camera摄像头开发必备源码"提供了一套基础的相机应用开发框架,涵盖了拍照、预览以及SurfaceHolder的功能实现。接下来,我们将详细讨论这些关键知识点。 1. **Android Camera API**: Android ...

    VB.Net_Camera.rar_VB.NET 摄像头_vb.net 拍照_vb.net 摄像头_vb.net摄像头

    本项目"VB.Net_Camera.rar"提供了一个简单的实例,教你如何利用VB.NET实现摄像头拍照的功能。下面将详细讲解其中涉及的关键知识点。 1. **摄像头访问接口**: 在VB.NET中,通常我们会使用`AxWindowsMediaPlayer`...

    .net调用摄像头拍照_VS2014

    在"Camera.zip"文件中,可能包含了一个已经实现上述功能的示例项目,你可以参考其代码结构和逻辑,以便更好地理解如何在VS2014中利用AForge.NET框架调用摄像头拍照。 总之,通过AForge.NET框架,开发者可以轻松地在...

    C#实现摄像头拍照

    在C#编程环境中,利用Visual Studio 2005(VS2005)开发摄像头拍照功能是一项常见的任务,尤其适用于构建桌面应用或者基于Web的交互式系统。本篇文章将详细解析如何通过C#实现这一功能,以及相关的核心知识点。 ...

    java调用摄像头拍照

    在Java编程环境中,调用摄像头拍照是一项常见的任务,特别是在开发涉及多媒体处理的应用程序时。本文将深入探讨如何在Java中实现这一功能,并提供相关的技术细节和步骤。 首先,要理解Java本身并不直接支持访问硬件...

    android调用前后置摄像头拍照

    以上就是Android调用前后置摄像头拍照的基本步骤。你可以根据实际需求进行扩展,比如添加闪光灯控制、设置拍照质量、裁剪图片等。这个`Android_Camera`压缩包文件可能包含了实现上述功能的完整代码示例,你可以参考...

    androidcamera摄像头驱动.doc

    - 在Android层面,Camera服务通过HAL(Hardware Abstraction Layer)与驱动交互,提供API供应用程序调用,实现拍照、录像等功能。 5. **Android Camera驱动开发** - 驱动开发者需要了解Linux设备驱动模型,理解...

    Android 实例实现自定义Camera和前后置摄像头切换以及图片缩小放大预览

    1.实现自定义Camera拍照; 2.实现前后置摄像头的切换; 3.实现Camera拍照后图片缩小显示以及正常预览; 4.实现Camera拍照后图片保存; 在具体实现代码之前,我们先来了解一下Android api对实现自定义Camera的介绍。 ...

    android使用usb外接摄像头拍照并保存照片

    这个"android使用usb外接摄像头拍照并保存照片"的示例项目,旨在解决这个问题,提供了一个完整的解决方案,涵盖了从连接摄像头到捕获图像再到本地存储的全过程。 首先,我们需要了解Android对USB设备的支持。...

    Android_surfaceView_Camera前置摄像头拍照,可重复预览

    在Android应用开发中,`SurfaceView` 和 `Camera` API 的结合使用是实现摄像头功能的常见方式,特别是在需要实时预览和拍照的场景下。本文将深入探讨如何利用`SurfaceView`来创建一个可重复预览和拍照的功能,主要...

    AndroidUSB摄像头含拍照

    在这个项目中,UVCCamera库很可能被使用,这是一个广泛用于Android USB摄像头开发的开源库,它封装了与USB摄像头交互的细节,提供了一套相对简单的API来实现拍照、录像等功能。通过调用这些API,开发者可以实现用户...

    C# usb摄像头拍照

    总结起来,使用C#进行USB摄像头拍照主要涉及选择合适的库(如AForge.NET或Emgu CV),初始化摄像头设备,监听新帧事件,捕获并保存图像。理解这些基本概念和步骤后,你可以根据项目需求进行扩展,实现更复杂的功能,...

Global site tag (gtag.js) - Google Analytics