利用Android手机里的摄像头进行拍照

------- 源自梦想永远是你IT事业的好友、只是勇敢地说出我学到! ----------


1.在API Guides中找到Camera,里面讲解了如何使用系统自带的摄像头进行工作,之后我会试着翻译这部分的内容。

2.找到Camera类:有android.hardware.Camera和android.graphics.Camera两个类,我们这里使用android.hardware.Camera。

使用Camera类来拍照的步骤如下(API 原文):

  1. Obtain an instance of Camera from open(int).
  2. Get existing (default) settings with getParameters().
  3. If necessary, modify the returned Camera.Parameters object and call setParameters(Camera.Parameters).
  4. If desired, call  setDisplayOrientation(int).
  5. Important: Pass a fully initialized SurfaceHolder to setPreviewDisplay(SurfaceHolder). Without a surface, the camera will be unable to start the preview.
  6. Important: Call startPreview() to start updating the preview surface. Preview must be started before you can take a picture.
  7. When you want, call takePicture(Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback, Camera.PictureCallback) to capture a photo. Wait for the callbacks to provide the actual image data.
  8. After taking a picture, preview display will have stopped. To take more photos, call startPreview() again first.
  9. Call stopPreview() to stop updating the preview surface.
  10. Important: Call release() to release the camera for use by other applications. Applications should release the camera immediately in onPause() (and re-open() it in onResume()).
1.首先,我们调用Camera类的open(int)方法来获取一个实例,如果是要使用后置摄像头,直接调用open()方法即可,如果想打开指定的摄像头,可为这个方法传递一个int值的摄像头ID参数(cameraID),这个ID的值只能在0到getNumberOfCameras()-1之间,一般0代表后置,1代表前置。我们在调用这个方法时,如果摄像头已经被其他的应用打开,那么就会抛出RuntimeException()。需要注意的是,这个方法可能会使用很长时间才能够完成,所以我们最好开启一个新线程来防止UI线程卡死。Camera camera = Camera.open(); //开启默认的后置摄像头

2.第二步,我们调用Camera类的getParameters()方法来获取拍照的参数,这个方法返回了一个Camera.Parameters对象。即Camera.Parameters parameters=camera.getParameters();

3.如果有必要的话,我们调用setParameters(Camera.Parameters params)来修改上面所返回的Camera.Parameters对象的拍照参数。设置的方法见Camera.Parameters类,常用的有:设置预览照片的大小setPreviewSize(int width,int height),设置预览照片时每秒显示多少帧的最小值和最大值setPreviewFpsRanges(int min,int max),fps指的是:每秒帧数(frames per second);

4.如果有必要的话,我们可以调用 setDisplayOrientation(int degrees)方法来设置预览照片的方向(顺时针的)。这个方法在肖像模式的应用中很有用,因为前置摄像头拍出来的照片就像是照镜子一样,左右是相反的,这时候就要改变预览的方向了。(这个之后自己做个实例对比)。

下面两步非常重要

5.我们传一个已经初始化完的SurfaceHoldersetPreviewDisplay(SurfaceHolder),来设置使用哪一个SurfaceView来显示取景照片,如果没有这个SurfaceView,就无法预览。

6.然后我们调用startPreView()方法开始预览取景。然后就可以拍照了。

7.调用Camera的 takePicture(Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback postview, Camera.PictureCallback jpeg)参数如下:

shutter the callback for image capture moment, or null
raw the callback for raw (uncompressed) image data, or null
postview callback with postview image data, may be null
jpeg the callback for JPEG image data, or null
8.当拍完一张照片之后,预览显示就会关掉。如果我们还想拍些照片,就需要重新调用startPreview();

9.结束程序时,要调用Camera的stopPreview()来结束取景预览。

10.重要:为了能让其他应用能够使用摄像头,我们要调用release()方法来释放摄像头。当Activity在onPause()的时候,释放掉;当onResume()的时候,重新打开。



------- 源自梦想永远是你IT事业的好友、只是勇敢地说出我学到! ----------
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Qt for Android可以通过Qt Multimedia模块来调用安卓手机摄像头实现拍照和录像功能。 首先,需要在.pro文件中添加multimedia模块的引用,即将`QT += multimedia`添加到.pro文件中。 接下来,创建一个QCamera对象,可以使用默认摄像头或指定摄像头。通过调用`QCameraInfo::defaultCamera()`可以获取默认摄像头的信息,或者使用`QCameraInfo::availableCameras()`获取所有可用摄像头列表。然后,调用`setCaptureMode()`方法来设置摄像头的捕获模式,可以选择使用`QCamera::CaptureStillImage`来拍照,或使用`QCamera::CaptureVideo`来录制视频。 如果需要显示摄像头的即时预览画面,可以创建一个QCameraViewfinder对象,并将其设置为QCamera的视图finder,然后将QCameraViewfinder设置为显示在窗口上。可以使用QGraphicsView或QWidget来显示摄像头的预览画面。 在拍照时,可以使用QCameraCaptureSession或直接使用QCamera的capture()方法来捕获静态图像。捕获的图像可以使用QCameraImageCapture类获取,并保存到本地文件中。 在录制视频时,可以使用QMediaRecorder来进行视频录制,首先创建一个QMediaRecorder对象,并使用setMedia()方法设置录制的媒体文件名和格式。然后,设置视频编码器、分辨率、比特率等参数,并调用record()方法开始录制,调用stop()方法停止录制。 最后,记得在AndroidManifest.xml文件中添加相应的权限,例如访问相机、录音和存储等权限。 通过以上步骤,就可以在Qt for Android中成功调用手机摄像头实现拍照和录像功能了。 ### 回答2: 在Qt for Android开发中,要调用手机摄像头,可以使用Qt Multimedia模块中的QCamera类。 首先,需要在.pro文件中添加对Multimedia模块的依赖: ``` QT += multimedia ``` 然后,在代码中引入QCamera和QCameraViewfinder类: ``` #include <QCamera> #include <QCameraViewfinder> ``` 接下来,创建一个QCamera对象并设置使用后置摄像头: ``` QCamera* camera = new QCamera; camera->setCaptureMode(QCamera::CaptureStillImage); // 设置为拍照模式 camera->setCaptureMode(QCamera::CaptureVideo); // 设置为录像模式 QCameraViewfinder* viewfinder = new QCameraViewfinder; camera->setViewfinder(viewfinder); QList<QCameraInfo> cameras = QCameraInfo::availableCameras(); foreach (const QCameraInfo& cameraInfo, cameras) { if (cameraInfo.position() == QCamera::BackFace) { // 后置摄像头 camera->setCamera(cameraInfo); // 设置为后置摄像头 break; } } ``` 然后,可以在需要调用摄像头的地方,调用QCamera的相关方法,比如开始预览、拍照或录像: ``` camera->start(); camera->searchAndLock(); camera->unlock(); camera->searchAndCapture(); ``` 最后,需要在界面上显示摄像头预览画面,可以将QCameraViewfinder设置为QWidget的子控件,并将其显示出来: ``` QVBoxLayout* layout = new QVBoxLayout; layout->addWidget(viewfinder); setLayout(layout); ``` 以上就是利用Qt for Android调用手机摄像头的基本步骤,开发者可以根据实际需求,进一步对摄像头功能进行扩展和定制。 ### 回答3: 在Qt中调用Android手机摄像头可以通过Qt Multimedia模块来实现。首先,确保已经正确配置了Qt for Android开发环境,并在.pro文件中添加了对Qt Multimedia模块的依赖,类似于:QT += multimedia。 接下来,创建一个Qt Quick界面来显示摄像头捕获的图像。可以使用Camera类型的对象来控制摄像头,并将摄像头的图像显示在Qt Quick界面上。 具体的步骤如下: 1. 在Qt Creator中创建一个新的Qt Quick项目。 2. 在qml文件中添加一个Item,用于显示摄像头图像,例如: Item { id: cameraView width: 640 height: 480 visible: camera.available anchors.centerIn: parent } 3. 在C++代码中创建一个Camera对象并连接到cameraView的source属性上: QCamera *camera = new QCamera(this); camera->setViewfinder(cameraView); camera->start(); 4. 在AndroidManifest.xml文件中添加相机权限,例如: <uses-permission android:name="android.permission.CAMERA"/> <uses-feature android:name="android.hardware.camera"/> <uses-feature android:name="android.hardware.camera.autofocus"/> <uses-feature android:name="android.hardware.camera.flash"/> 5. 在运行项目之前,将生成的apk安装到Android手机上,并确保手机上有可用的摄像头。 通过以上步骤,你的Qt for Android应用程序现在可以调用Android手机摄像头并显示捕获的图像了。你还可以通过QCameraViewfinderSettings类来更改摄像头的设置,例如分辨率、帧率等。除了显示图像,你还可以使用QCamera类提供的其他函数来控制摄像头拍照、录像等功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值