本帖最后由 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的数据。。。试了很多方法都没得解决。
演示视频如下:
一周热门 更多>