OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2433|回复: 2

精英,战舰,阿波罗开发板支持实时全屏截图代码

[复制链接]

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
发表于 2017-8-24 10:45:20 | 显示全部楼层 |阅读模式
三月份的时候参加了一个嵌入式的比赛,然后买了几块正点原子的开发板,做的一个项目是摄像头巡线小车,外加实时图传,超声波测距,红外控制,额,好像讲多了直接切入正题,关于开发板全屏截图的事,因为之前看过照相机程序,看了一下保存屏幕像素点到bmp图像的程序,不得不说,正点原子的代码就是好,留出的接口
和扩展很强,大概就是这一个函数吧,首先是生成不会重复的名称(路径),基于时间的camera_new_pathname(pname);接着判断名称生成是否成功if(pname!=NULL),接着
判断BMP编码这一块区域的返回值,就是有没有成功if(bmp_encode(pname,(lcddev.width-240)/2,(lcddev.height-320)/2,240,320,0)),这时候没有错误的时候就已经把
图片存进SD卡了
接下来就是对这个函数的改造了,先看一下bmp_encode(pname,(lcddev.width-240)/2,(lcddev.height-320)/2,240,320,0)这个函数,当然这是已经调用的了,有了参数,
原版是这样的,u8 bmp_encode(u8 *filename,u16 x,u16 y,u16 width,u16 height,u8 mode);下面是说明
//BMP编码函数
//将当前LCD屏幕的指定区域截图,存为16位格式的BMP文件 RGB565格式.
//保存为rgb565则需要掩码,需要利用原来的调色板位置增加掩码.这里我们已经增加了掩码.
//保存为rgb555格式则需要颜色转换,耗时间比较久,所以保存为565是最快速的办法.
//filename:存放路径
//x,y:在屏幕上的起始坐标  
//mode:模式.0,仅仅创建新文件的方式编码;1,如果之前存在文件,则覆盖之前的文件.如果没有,则创建新的文件.
//返回值:0,成功;其他,错误码.  

第一个,前面我们用的时间来作为名称,因为不会重复,然后我们只需要把起始坐标设置0,0,宽和高设置成自己的屏幕宽高,如果说你还需要换屏幕,说的高大上一点就是提高兼容性的话
可以使用LCD屏幕里面的宽高的参数,就是
//LCD重要参数集
typedef struct  
{                                                                                    
        u16 width;                        //LCD 宽度
        u16 height;                        //LCD 高度
        u16 id;                                //LCD ID
        u8  dir;                        //横屏还是竖屏控制:0,竖屏;1,横屏。       
        u16        wramcmd;                //开始写gram指令
        u16  setxcmd;                //设置x坐标指令
        u16  setycmd;                //设置y坐标指令
}_lcd_dev; 或者

首先需要包含lcd.h头文件
然后就是在需要的地方调用这个bmp编码函数
在这里写成一个函数封装起来
//文件名自增(避免覆盖)
//组合成:形如"0HOTO/PIC13141.bmp"的文件名
void Screenshot_new_pathname(u8 *pname)
{         
        u8 res;                                         
        u16 index=0;
        while(index<0XFFFF)
        {
                sprintf((char*)pname,"0:SCREENSHOTS/PIC%05d.bmp",index);
                res=f_open(ftemp,(const TCHAR*)pname,FA_READ);//尝试打开这个文件
                if(res==FR_NO_FILE)break;                //该文件名不存在=正是我们需要的.
                index++;
        }
}
u8*const screenshot_remind_tbl[GUI_LANGUAGE_NUM]=
{
        "截图保存成功",
        "嶻圗保存成功",
        "Screenshot save succeed",         
};
void screenshot()
{
        u8 *pname;
        pname=mymalloc(SRAMIN,30);
        Screenshot_new_pathname(pname);
        if((KEY0==0)&&(KEY1==0))
        {
                delay_ms(10);
                if((KEY0==0)&&(KEY1==0))
                {
                        if(bmp_encode(pname,(lcddev.width-480)/2,(lcddev.height-800)/2,480,800,0)){;}
                        BEEP=1;delay_ms(100);BEEP=0;
                }
        }
        window_msg_box((lcddev.width-200)/2,(lcddev.height-80)/2,200,80,(u8*)screenshot_remind_tbl[gui_phy.language],"提示信息",12,0,0,0);
        while((KEY0==0)&&(KEY1==0));
        myfree(SRAMIN,pname);
}

该功能需要同时点住KEY0和KEY1键,听到“嘀“的一声就松开手,然后就可以存下截图了,还会有一个截图成功的对话框。
可以使用一个中断或者信号量什么的,在那里调用screenshot这个函数,大概就是这样吧
所有的开发板应该都可以,不过没钱买那么多,哈哈哈,也可以支持操作系统,但是需要包含bmp编码及rtc和sd卡等的c和h文件,具体效果大家试一试
最后配上几张图

pic1

pic1

pic2

pic2

(可能程序修改的有点多了)
好吧,这个界面是我改过的,刚才才发现存截图的那个U盘忘带了,但是回去又没网,先看这两张吧,下次多带几张
天然懒,天然呆
能吃会睡,未来可期
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
 楼主| 发表于 2018-6-26 00:26:35 | 显示全部楼层
本帖最后由 xcc521 于 2018-6-26 00:29 编辑

补充高清截图 PIC20150114180922 [原始大小].jpg

PIC20150114180950 [原始大小].jpg

PIC20150114181008 [原始大小].jpg

PIC20150114182420 [原始大小].jpg

PIC20150114182510 [原始大小].jpg

PIC20150114182535 [原始大小].jpg

PIC20180626001112 [原始大小].jpg

PIC20180626001127 [原始大小].jpg

PIC20180626001134 [原始大小].jpg

PIC20180626001144 [原始大小].jpg

PIC20180626001205 [原始大小].jpg

PIC20180626001218 [原始大小].jpg

PIC20180626001240 [原始大小].jpg

PIC20180626001253 [原始大小].jpg

PIC20180626001304 [原始大小].jpg

PIC20180626001400 [原始大小].jpg

PIC20180626001433 [原始大小].jpg

PIC20180626001535 [原始大小].jpg

天然懒,天然呆
能吃会睡,未来可期
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-6-26 01:14:16 | 显示全部楼层
楼主把我这个GUI玩的很熟啊。。。厉害。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 08:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表