把前置摄像头当镜子使:手机镜子----mirror.ipk

本文介绍如何将手机前置摄像头作为镜子使用,通过在屏幕上实时显示相机预览,创建一个简单的镜子应用。文章详细讲解了如何初始化GTK界面,设置相机预览尺寸,将相机输出映射到屏幕,以及如何切换前后置摄像头。虽然最终尝试保存前置摄像头拍摄的图片未成功,但展示了主摄像头拍照并保存的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

上次讲了如何开启相机,但是还没得到屏幕输出

 

这次就看看怎么把相机输出到屏幕上,做个镜子吧:

 

首先加入头文件:

#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里面去了,是不是很简单?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值