emwin截屏例程

本文介绍了一个使用emWin库进行屏幕截图的功能,并将其保存为BMP格式的图片的方法。此外,还实现了一个按键任务,当按下指定按键时,会触发屏幕截图功能并将截图保存到指定路径。

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

/**
  *****************************************************************************
  * @Name   : emWin向文件写入一个字节数据
  *
  * @Brief  : none
  *
  * @Input  : Data: 要写入的数据
  *           *p:   路径
  *
  * @Output : none
  *
  * @Return : none
  *****************************************************************************
**/
static void _WriteByte2File(U8 Data, void * p)
{
        UINT nWrite = 0;
         
        f_write((FIL *)p, (TCHAR *)&Data, 1, &nWrite);
}
 
/**
  *****************************************************************************
  * @Name   : emWin得到一幅图片并写入存储器
  *
  * @Brief  : none
  *
  * @Input  : *FileName: 文件名称
  *           (x0, y0):  起点坐标
  *           xSize:     图片X方向大小
  *           ySize:     图片Y方向大小
  *
  * @Output : none
  *
  * @Return : none
  *****************************************************************************
**/
void emWin_CreateBMPPicture(uint8_t * FileName, int x0, int y0, int xSize, int ySize)
{
        static FIL hFile;
        GUI_COLOR forecolor, backcolor;
         
        //
        //保险起见,先保存一下
        //
        forecolor = GUI_GetColor()//获取前景颜色
        backcolor = GUI_GetBkColor()//获取背景颜色
        //
        //创建一个文件
        //
        f_open(&hFile, (const TCHAR *)FileName, FA_READ | FA_WRITE | FA_CREATE_ALWAYS);
        GUI_BMP_SerializeEx(_WriteByte2File, x0, y0, xSize, ySize, &hFile);
        f_close(&hFile)//写完,关闭文件
         
        GUI_SetColor(forecolor)//恢复前景颜色
        GUI_SetBkColor(backcolor)//恢复背景颜色
}
/**
  *****************************************************************************
  * @Name   : OS创建按键任务
  *
  * @Brief  : none
  *
  * @Input  : none
  *
  * @Output : none
  *
  * @Return : none
  *****************************************************************************
**/
void Key_Task(void * pdata)
{
        u8 i = 0;
        u8 buf[100];
         
        pdata = pdata;
         
        while (1)
        {
                OSTimeDlyHMSM(0, 0, 0, 20)//延时500ms
                if (KEY0 == 0)
                {
                        OSSchedLock()//调度器上锁
                        LED1 = 0//亮灯表示正在截屏
                        sprintf ((char *)buf, "0:/SCREENSHORT_%d.bmp", i);
                        emWin_CreateBMPPicture(buf, 0, 0, 800, 480)//截屏
                        LED1 = 1//完成了,灭灯
                        i++;
                        OSSchedUnlock()//调度器解锁
                }
                 
        };
}
原文出处:http://www.openedv.com/forum.php?mod=viewthread&tid=66053&highlight=%BD%D8%C6%C1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值