Ramble_Naylor 2022-11-24 10:56 采纳率: 0%
浏览 12
已结题

Winform开发基于视频流的应用遇到了窗体叠加后上层窗体中的PNG图片有锯齿的问题

问题遇到的现象和发生背景

使用winform开发基于海康摄像头视频流的应用,下层显示视频直播画面,上层显示操作控件和按钮。为了实现操作控件和按钮,采用了两个 form 窗体叠加的方式,下层窗体仅显示视频流画面,上层窗体做业务处理,撒点,云台控制,按钮。现在遇到的问题是,上层窗体中的PNG图片边缘有锯齿。

窗体叠加实现思路

程序启动时候加载下层窗体,在下层窗体 初始化后实例化上层窗体,将上层窗体的大小,位置设置为和下层窗体一致,并绑定 locationChange 事件和 resize 事件,让两个窗体看起来就是一个窗体,并设置上层窗体属于下层窗体,设置上层窗体 BackColor = Color.Black TransparencyKey = Color.Black,设置上层窗体在前面显示 BringToFront()

锯齿问题截图

img

https://imgse.com/i/zGGcSx

尝试过的方法

方法1:在一个窗体中实现,叠加panel ,无法解决,视频所在panel直接覆盖了其他控件所在panel
方法2:调用 windows api,使用UpdateLayeredWindow 重绘,无法解决,我要消除的是控件的锯齿,此方案从字面意思就可知它是绘制窗体,这个方案对需要不规则的窗体有效果,比如窗体为圆角,再比如将不规则的图片作为窗体背景图

现在的思路

CSDN上面有一个老哥说引入第三方控件库 dskin 可以解决,目前没有尝试过。我在想的是,dskin 也是c# 编写的,我现在遇到的局限性这个控件库也会遇到。不过如果实在没有更好的办法我将考虑此方案。

我想要达到的结果

想要的结果就是下层(无论下层是否是窗体都可)显示视频,上层显示控件、图片、图标。并且通过上层窗体可以看到下层窗体的视频画面,png图片部分可以透视到下层,能体现png图片的渐变效果。

  • 写回答

3条回答 默认 最新

  • churuxu 2022-11-24 13:05
    关注

    UpdateLayeredWindow 可以解决啊,为啥不用

    评论

报告相同问题?

问题事件

  • 系统已结题 12月2日
  • 修改了问题 11月24日
  • 创建了问题 11月24日

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?