摄像头图像数据实时显示在EMWIN的窗口上

2019-07-20 01:46发布

本帖最后由 Psheng 于 2019-3-30 10:42 编辑

F_V001_003.rar (34.92 MB, 下载次数: 133) 2019-2-28 20:33 上传 点击文件名下载附件
首先在EMWIN中创建了Iconview控件做APP图标。点击Camera的app后 创建出一个FRAMEWIN并且创建一个BUTTON(通过BUTTON_SetBitmapEx()在这个按钮上面显示图像)
这个button一定要大于屏幕的尺寸 因为没有找到改变BUTTON尺寸的函数,所以这样就可以在窗口改变的时候button不用改变。
再申请整个屏幕的显存(如果只申请窗口大小的内存 在窗口改变的时候重新申请内存 容易卡死 临界区都不行)。

然后将申请的内存地址赋值给bmCamerabuf.pData(button位图的数据参数指针)。
这样只用在循环中无效化整个Camera的FRAMEWIN ,致使一直调用窗口的回调函数的重绘(在重绘中写入button的图像)


并且在窗口大小改变后 更改摄像头输出尺寸和button位图的大小参数 适配窗口
bmCamerabuf.XSize=X_old;/*更改图像参数大小*/
bmCamerabuf.YSize=Y_old;
bmCamerabuf.BytesPerLine=2*X_old;


因为EMWIN的颜 {MOD}是BGR的。而0V5640默认是RGB的,颜 {MOD}有点不对。
看了5640的手册 找不到合适的BGR输出格式。。。。
最后发现可以改变bmCamerabuf中的颜 {MOD}模式为镜像的GUI_DRAW_BMPM565
变成RGB格式  。。。。。。。。。。。。。。。。。。淦!

但是在图像显示过程中 画面会撕裂成多个画面 。改变DMA双缓冲的单个缓存数据可以改善这个现象
#define jpeg_line_size        200
最好的结果就是200的时候画面不会太撕裂。。。。。
看样子应该是帧中断里面没有处理好DMA的数据。。。试了很多方法都没得解决。


演示视频如下:

        








友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
lzts
1楼-- · 2019-07-20 04:44
谢谢分享            
黄凤堂
2楼-- · 2019-07-20 10:16
 精彩回答 2  元偷偷看……
星空
3楼-- · 2019-07-20 12:10
谢谢分享

一周热门 更多>