上次讲了如何开启相机,但是还没得到屏幕输出
这次就看看怎么把相机输出到屏幕上,做个镜子吧:
首先加入头文件:
#include <mmf/mm_camcorder.h>
定义几个尺寸:
#define PREVIEW_W 480
#define PREVIEW_H 640
这里最大好像只能是480×640
再声明几个全局变量:
GtkWidget *overlay,*overlay_widget;
int win_id;
MMHandleType front_cam=0;
MMCamPreset cp;
照之前将的初始化一个form:
不过这次添加到form的组件是一个gtk_fixed,并通过create_overlay_fixed()初始化:
这里往fixed里面加入了一个overlay,并设置了overlay的尺寸和类型GTK_OVERLAY_TYPE_YUV420
看回到main()中,fiexd初始化完成后,就是开启相机cam_preview_start():
这里的CAMERA1表示前置相机,CAMERA0表示主相机
把相机输出到屏幕上overlay_maped_widget:
完成,现在就可以在屏幕上看到自己的样子了
如果想得到主相机的输出,就把前面的CAMERA1换成CAMERA0
最后,想把前置相机拍摄的画面保存,按照文档试了很多遍都没成功,以为是编码格式之类的问题,后来把CAMERA1换成CAMERA0即主相机,结果一下子就成功了,看来前置相机拍摄的相片是无法保存的啦
下面是保存的代码:
在main中给mainwindow加入一个标题按钮:
gtk_main_window_set_title_button( GTK_MAIN_WINDOW(mainwindow), GTK_POS_LEFT, NULL, "capture", cam_capture, NULL);
回调函数cam_capture:
不要被这里的front_cam误导,只是因为一开始声明的变量是front_cam,而实际上已经换成camera0主相机
MMCamcorderCaptureStart表示按下拍照按钮,而MMCamcorderSetVideoCaptureCallback就是给这个动作设置了一个回调save_image:
ok,相片保存到mypic.jpg里面去了,是不是很简单?