android摄像头

android的模拟器上面调用系统的摄像机会出现异常的现象,会自动退出,这可能和模拟器有关,模拟器无法使用系统的硬件,就像重力感应和方向感应系统一样都无法使用,甚至是GPS
导航系统也无法使用,好像有个第三方的组织,已经模拟出来模拟器上使用重力感应。但是我没有真正的看到,下面的这几段是一本书上面写的android上面使用模拟器的例子。
这个示例将显示预览图像,在图像上点击则触发拍照操作,拍照成功后显示所拍的照片,然后点击Start菜单可以继续拍照。
首先通过OPhone开发工具(ODT)创建一个OPhone项目,填写基本信息后ODT会自动创建一个\src\org\goodev\camera\CameraActivity.java文件和res\l文件。
l文件内容修改为如下:
view plaincopy to clipboardprint?
1.    <?xml version="1.0" encoding="utf-8"?> 
2.    <LinearLayout 陶瓷压机xmlns:android="schemas.android/apk/res/android" 
3.        android:orientation="vertical" 
4.        android:layout_width="fill_parent" 
5.        android:layout_height="fill_parent" 
6.        > 
7.        三相电机保护器<SurfaceView android:id="@+id/camera" 
8.            android:layout_width="fill_parent" 
9.            android:layout_height="fill_parent"/> 
10.     <ImageView android:id="@+id/image" 
11.         android:layout_width="fill_parent" 
12.         android:layout_height="fill_parent"/> 
13. </LinearLayout> 
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="schemas.android/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <SurfaceView android:id="@+id/camera" android:layout_width="fill_parent" android:layout_height="fill_parent"/> <ImageView android:id="@+id/image" android:layout_width="fill_parent" android:layout_height="fill_parent"/> </LinearLayout>
SurfaceView 用来预览图像,ImageView 智能红绿灯控制系统用来显示所拍的照片。这里也需读者会问,为什么要使用SurfaceView 泡泡溶液来预览图像?使用其他的View不可以吗?要回答这个问题,需要了解下SurfaceView 的作用,关于SurfaceView 的详细介绍已超出了本教程的范围,我们会在后续教程中来详细介绍SurfaceView ,这里只做简要介绍。
在通常情况下,OPhone程序中的View都是在同一个GUI线程中绘制的,该线程也是接收用户交互事件的线程(例如:按钮点击事件)。从另外的线程修改GUI元素是不可以的,如果要迅速的更新UI显示该如何办?显然在主线程中还需要处理其他事件,不适合做这件事情,所以OPhone提供了SurfaceView 来满足这种需求。一个SurfaceView 包装一个包塑轴承Surface对象(通过SurfaceHolder操作该对象)而不是Canvas对象,这就是关键所在,Surface可以在其他线程中绘制,这对于周期性更新和要求高帧率的场景来说是很有用的,特别是在游戏开发中。Surface中包含了当前UI的原生数据(raw data),在不同的软件和硬件条件下对这些数据的处理是不一样的,这就可以通过一些设置来加速图形的绘制,可以通过SurfaceHoldersetType函数来设置,目前接收如下的参数:
∙SURFACE_TYPE_NORMAL:用RAM缓存原生数据的普通Surface
∙SURFACE_TYPE_HARDWARE:适用于DMA(Direct memory access )引擎和硬件加速的Surface
∙SURFACE_TYPE_GPU:适用于GPU加速的Surface
∙SURFACE_TYPE_PUSH_BUFFERS:表明该Surface不包含原生数据,Surface用到的数据由其他对象提供,在Camera图像预览中就使用该类型的Surface,有Camera负责提供给预览Surface数据,这样图像预览会比较流畅。如果在这里设置了上面三种类型则可以发现不会出现预览图像,在和Camera底层的预览机制实现有关,如果对预览有特殊要求的可以现实PreviewCallback 接口来自己处理。
关于SurfaceView先简单介绍到这里,下面来继续看看如何在代码中实现。
修改CameraActivity类使其实现如下接口:
view plaincopy to clipboardprint?
1.    android.view.SurfaceHolder.Callback   
2.    android.view.View.OnClickListener 
原创 android 之摄像头
google查了一下camera方面的资料,前几页的检索内容居然一模一样的,真是浪费时间,严重鄙视一下。
既然要用到硬件肯定要牵涉到权限,
l中加入camera的权限:
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
调用camera最简单的办法是调用系统的功能,然后通过onActivityResult方法获得图像数据。
防老剂264
不是太习惯用androidxml配置文件,但是为了代码简单,先加一个l
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="schemas.android/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView android:text="Camera Demo" android:id="@+id/TextView01"
        android:layout_width="fill_parent" android:layout_height="wrap_content"></TextView>
    <RelativeLayout android:id="@+id/FrameLayout01" android:layout_weight="1"
        android:layout_width="fill_parent" android:layout_height="fill_parent"></RelativeLayout>
    <Button android:text="test" android:id="@+id/Button01"
        android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"></Button>
</LinearLayout>
系统camerauri为:
dia.action.IMAGE_CAPTURE
final int TAKE_PICTURE = 1;
ImageView iv;
private void test1(){
      iv = new ImageView(this);
      ((FrameLayout)findViewById(R.id.FrameLayout01)).addView(iv);
      Button buttonClick = (Button)findViewById(R.id.Button01);
      buttonClick.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View arg0) {
                startActivityForResult(new Intent("dia.action.IMAGE_CAPTURE"), T
AKE_PICTURE);
            }
            
        });
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == TAKE_PICTURE) {
            if (resultCode == RESULT_OK) {
                Bitmap b = (Bitmap) Extras().get("data");
                iv.setImageBitmap(b);
            }
        }
}

本文发布于:2024-09-21 23:35:56,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/159426.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:预览   图像   使用
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议