netease-kit / NIM_PC_Demo

云信Windows(PC) C/C++ Demo源码仓库
Other
275 stars 174 forks source link

自定义控件绘制本地摄像头数据没有颜色 #108

Open ManyFish opened 1 year ago

ManyFish commented 1 year ago

参考demo的视频通话部分,使用opencv获取本地摄像头数据对自定义控件进行绘制后,发现绘制的画面没有颜色,本地是灰度图画面;opencv获取的视频帧是正确的,是格式还是绘制问题呢?请问该如何解决?感谢

nmgwddj commented 1 year ago

opencv 拿出来的是什么格式的帧数据?是否已经正确转换为 RGB 数据进行渲染?

ManyFish commented 1 year ago

opencv使用MJPG视频编码格式,然后对视频帧做了cv::cvtColor(frame, rgbFrame, cv::COLOR_BGR2RGB)操作,绘制后还是没有颜色

ManyFish commented 1 year ago

请问保存时是要转成YUV_I420格式吗?

nmgwddj commented 1 year ago

bitmap_control 的实现主要还是围绕 Windows DC 来操作的,所以他不认识 YUV 格式的数据,最终都要转为 ARGB 才可以。参考:https://github.com/netease-kit/NIM_PC_Demo/blob/master/tool_kits/ui_component/g2_kit/gui/bitmap_control_g2.cpp

我建议你先脱离 duilib 框架,使用原生 Windows API 写一个简单的示例从图片读取到内存然后渲染到 UI 界面上,了解清楚整个流程后再通过 UI 框架处理。