当前位置:操作系统 > 安卓/Android >>

android 多媒体和相机详解八

获取图像
  一旦你建立了预览类和显示预览类的viewlayout,你就已准备好开始使用你的应用获取图像了.在你的应用代码中,你还必须要建立起那些用于控制的控件们的侦听器,来响应用户的动作.

 


  要取得图像,使用Camera.takePicture()方法.此方法有三个参数.要获得JPEG图像,你必须实现一个Camera.PictureCallback接口来接收图像数据然后写入文件中.下面的代码演示了最基本的Camera.PictureCallback接口的实现.


[java]
private PictureCallback mPicture = new PictureCallback() { 
    @Override 
    public void onPictureTaken(byte[] data, Camera camera) { 
 
        File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE); 
        if (pictureFile == null){ 
            Log.d(TAG, "Error creating media file, check storage permissions: " + 
                e.getMessage()); 
            return; 
        } 
 
        try { 
            FileOutputStream fos = new FileOutputStream(pictureFile); 
            fos.write(data); 
            fos.close(); 
        } catch (FileNotFoundException e) { 
            Log.d(TAG, "File not found: " + e.getMessage()); 
        } catch (IOException e) { 
            Log.d(TAG, "Error accessing file: " + e.getMessage()); 
        } 
    } 
}; 

private PictureCallback mPicture = new PictureCallback() {
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {

        File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
        if (pictureFile == null){
            Log.d(TAG, "Error creating media file, check storage permissions: " +
                e.getMessage());
            return;
        }

        try {
            FileOutputStream fos = new FileOutputStream(pictureFile);
            fos.write(data);
            fos.close();
        } catch (FileNotFoundException e) {
            Log.d(TAG, "File not found: " + e.getMessage());
        } catch (IOException e) {
            Log.d(TAG, "Error accessing file: " + e.getMessage());
        }
    }
};


通过调用Camera.takePicture()方法触发图像获取事件.下面的代码演示了如了在一个按钮的View.OnClickListener方法中调用此方法.


[java]
// 为获取按钮增加一个listener  
Button captureButton = (Button) findViewById(id.button_capture); 
captureButton.setOnClickListener( 
    new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
            // 从相机获取图像  
            mCamera.takePicture(null, null, mPicture); 
        } 
    } 
); 

// 为获取按钮增加一个listener
Button captureButton = (Button) findViewById(id.button_capture);
captureButton.setOnClickListener(
    new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // 从相机获取图像
            mCamera.takePicture(null, null, mPicture);
        }
    }
);

注:mPicture成员引用自"使用相机"一节的同名成员变量.

 


注意:记注在用完时要使用Camera.release()来释放相机对象!关于如何释放相机,见"释放相机"一节.

 


获取视频


下面这些配置给MediaRecorder的视频录制参数被置为默认值.然而,你可以自己设置这些配置项的值:

setVideoEncodingBitRate()

setVideoSize()

setVideoFrameRate()

setAudioEncodingBitRate()

setAudioChannels()

setAudioSamplingRate()


  使用android框架获取视频需要小心管理相机对象并且与MediaRecorder类做好协调.当使用相机进行录像时,你必须管理好Camera.lock()和Camera.unlock()两个调用以允许MediaRecorder操作相机.


  注:从Android4.0 (API level 14)开始,Camera.lock()和Camera.unlock()调用会自动管理.

 

  与从像机获取图像不一样,获取视频需要一个十挑剔的调用顺序.你必须按照特殊的顺序才能成功的准备并获取视频,如下所示:

打开相机 –使用Camera.open()来获取一个相机对象的实例.

连接预览 -通过Camera.setPreviewDisplay()连接一个Su易做图ceView到相机来准备一个实时预览.

开始预览 –调用Camera.startPreview()来显示实时图像.

开始录制视频 –下面的步骤必须完整的执行才能成功的录制视频:

Unlock相机– 调用Camera.unlock()来Unlock相机以供MediaRecorder使用.

配置MediaRecorder– 按以下顺序调用MediaRecorder的方法.更多知识请参考MediaRecorder参考文档.

setCamera()- 设置视频获取所使用的相机,使用你的应用的当前的相机实例.

setAudioSource()- 设置音频source,使用MediaRecorder.AudioSource.CAMCORDER.

setVideoSource()- 设置视频source,使用MediaRecorder.VideoSource.CAMERA.

设置视频输出的格式和编码.对于Android2.2 (API Level8)及更高版本,使用MediaRecorder.setProfile方法,使用CamcorderProfile.get()来获得一个profile.对于之前的版本,你必须用参数来设置视频输出格式和编码:

setOutputFormat()- 设置输出格式,指定为默认的或MediaRecorder.OutputFormat.MPEG_4.

setAudioEncoder()- 设置音频编码类型,指定为默认的或MediaRecorder.AudioEncoder.AMR_NB.

setVideoEncoder()- 设置视频编码类型,指定为默认的或MediaRecorder.VideoEncoder.MPEG_4_SP.

setOutputFile()-指定输出文件,使用getOutputMediaFile(MEDIA_TYPE_VIDEO).toString(),这个方法是"保存媒体文件"一节(在后面)中的例子代码.

setPreviewDisplay()- 为你的应用指定Su易做图ceView预览layout元素,使用在连接预览时指定的相同对象.

  注意:你必须按上面的顺序调用MediaRecorder的配置方法们,否则你的应用将遇到悲剧从而失败.

准备MediaRecorder- 准备MediaRecorder,主要是通过调用配置方法MediaRecorder.prepare().

开始MediaRecorder- 调用MediaR

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,