返回顶部
首页 > 资讯 > 精选 >C#中wpf如何通过HwndHost渲染视频
  • 454
分享到

C#中wpf如何通过HwndHost渲染视频

2023-06-25 15:06:41 454人浏览 独家记忆
摘要

这篇文章主要为大家展示了“C#中WPF如何通过HwndHost渲染视频”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#中wpf如何通过HwndHost渲染视频”这篇文章吧。一、如何实现通过继承

这篇文章主要为大家展示了“C#WPF如何通过HwndHost渲染视频”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#中wpf如何通过HwndHost渲染视频”这篇文章吧。

一、如何实现

通过继承HwndHost并实现抽象方法即可作为一个带句柄的wpf控件在xaml中使用,代码如下:
win32api版本:

class NativeHost : HwndHost{    new public IntPtr Handle    {        get { return (IntPtr)GetValue(HandleProperty); }        set { SetValue(HandleProperty, value); }    }    // Using a DependencyProperty as the backing store for Hwnd.  This enables animation, styling, binding, etc...    public static readonly DependencyProperty HandleProperty =        DependencyProperty.ReGISter("Handle", typeof(IntPtr), typeof(NativeHost), new PropertyMetadata(IntPtr.Zero));    protected override HandleRef BuildWindowCore(HandleRef hwndParent)    {        Handle = CreateWindowEx(            0, "static", "",            WS_CHILD | WS_VISIBLE | LBS_NOTIFY,            0, 0,            (int)Width, (int)Height,            hwndParent.Handle,            IntPtr.Zero,            IntPtr.Zero,            0);        return new HandleRef(this, Handle);    }    protected override void DestroyWindowCore(HandleRef hwnd)    {        DestroyWindow(hwnd.Handle);    }    const int WS_CHILD = 0x40000000;    const int WS_VISIBLE = 0x10000000;    const int LBS_NOTIFY = 0x001;    [DllImport("user32.dll")]    internal static extern IntPtr CreateWindowEx(int exStyle, string className, string windowName, int style, int x, int y, int width, int height, IntPtr hwndParent, IntPtr hMenu, IntPtr hInstance, [MarshalAs(UnmanagedType.AsAny)] object pvParam);    [DllImport("user32.dll")]    static extern bool DestroyWindow(IntPtr hwnd);}

HwndSource版本:

class NativeHost : HwndHost{    new public IntPtr Handle    {        get { return (IntPtr)GetValue(HandleProperty); }        set { SetValue(HandleProperty, value); }    }    // Using a DependencyProperty as the backing store for Hwnd.  This enables animation, styling, binding, etc...    public static readonly DependencyProperty HandleProperty =        DependencyProperty.Register("Handle", typeof(IntPtr), typeof(NativeHost), new PropertyMetadata(IntPtr.Zero));    HwndSource _source;    protected override HandleRef BuildWindowCore(HandleRef hwndParent)    {        _source = new HwndSource(0, WS_CHILD | WS_VISIBLE | LBS_NOTIFY, 0,0,0, (int)Width, (int)Height, "nativeHost", hwndParent.Handle);        Handle = _source.Handle;        return new HandleRef(this,Handle);    }    protected override void DestroyWindowCore(HandleRef hwnd)    {        _source.Dispose();    }    const int WS_CHILD = 0x40000000;    const int WS_VISIBLE = 0x10000000;    const int LBS_NOTIFY = 0x001;}

二、使用方式

直接在xaml中使用上述实现的控件:

<Window x:Class="WpfApp1.MainWindow"        xmlns="Http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"        xmlns:mc="http://schemas.openxmlfORMats.org/markup-compatibility/2006"        xmlns:sys="clr-namespace:System;assembly=mscorlib"        xmlns:local="clr-namespace:WpfApp1" xmlns:interop="clr-namespace:System.windows.Interop;assembly=PresentationFramework"        mc:Ignorable="d"        Title="MainWindow" Height="440" Width="640"           >    <Grid>          <!--控件有个Handle属性,可以绑定,使用OneWaytoSource赋值给viewModel-->        <local:NativeHost x:Name="NH_Plane" Height="360" Width="640" ></local:NativeHost>    </Grid></Window>

在Loaded事件中才能获取到句柄,在此事件之前句柄还没有生成。

private void Window_Loaded(object sender, RoutedEventArgs e){    //获取控件句柄    var hwnd=NH_Plane.Handle    //通过句柄进行渲染}

三、示例

示例代码:
https://download.csdn.net/download/u013113678/40304426
注:示例代码与文本所有代码基本一致,渲染部分在c++的dll不可见,请根据需要下载。
效果预览:

C#中wpf如何通过HwndHost渲染视频

以上是“C#中wpf如何通过HwndHost渲染视频”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: C#中wpf如何通过HwndHost渲染视频

本文链接: https://lsjlt.com/news/305534.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#中wpf如何通过HwndHost渲染视频
    这篇文章主要为大家展示了“C#中wpf如何通过HwndHost渲染视频”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#中wpf如何通过HwndHost渲染视频”这篇文章吧。一、如何实现通过继承...
    99+
    2023-06-25
  • C# wpf 通过HwndHost渲染视频的实现方法
    目录前言一、如何实现二、使用方式三、示例总结前言 日常开发中,特别是音视频开发,需要在界面上渲染视频,比如制作一个播放器、或者视频编辑工具、以及视频会议客户端。通常拿到的是像素格式数...
    99+
    2024-04-02
  • Vue如何通过JSX动态渲染组件
    这篇文章主要介绍“Vue如何通过JSX动态渲染组件”,在日常操作中,相信很多人在Vue如何通过JSX动态渲染组件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue如何通过JSX动态渲染组件”的疑惑有所帮助!...
    99+
    2023-07-04
  • 如何通过Java获取酷6视频
    这篇文章给大家分享的是有关如何通过Java获取酷6视频的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。通过JAVA获取酷6视频,现在很多社会网站都有这个功能,用户输入酷6视频地址后,能找到对应的视频及视频的缩略图,...
    99+
    2023-06-17
  • 如何通过php函数解决页面渲染慢的问题?
    在开发网页应用的过程中,页面渲染慢是一个常见的问题。用户访问一个网页时,如果页面渲染时间过长,可能会导致用户的不耐烦,甚至放弃访问。因此,加快页面渲染速度对于提高用户体验和页面性能至关重要。PHP 是一种广泛使用的服务器端编程语言,它拥有丰...
    99+
    2023-10-21
    PHP函数 页面渲染
  • 如何通过nodejs服务器读取HTML文件渲染到页面
    这篇文章主要介绍了如何通过nodejs服务器读取HTML文件渲染到页面,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.分别简单实现三个备用...
    99+
    2024-04-02
  • 如何通过Java实现修改视频分辨率
    目录前言环境依赖代码验证一下前言 本文提供可以调整视频分辨率的java代码,实用主义的狂欢。 环境依赖 添加需要的maven依赖。 <dependency&...
    99+
    2024-04-02
  • Vue中如何实现列表渲染,排序,过滤操作
    这篇文章主要为大家展示了“Vue中如何实现列表渲染,排序,过滤操作”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue中如何实现列表渲染,排序,过滤操作”这篇文章吧。1. 列表(渲染、排序、过滤...
    99+
    2023-06-29
  • 如何通过Python将MP4视频转换为GIF动画
    这篇文章将为大家详细讲解有关如何通过Python将MP4视频转换为GIF动画,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。运行环境你需要安装 OpenCV 绑定以读取 MP4 文件并将视频中的每一帧转换为...
    99+
    2023-06-22
  • HTML5如何通过Vedio标签实现视频循环播放
    小编给大家分享一下HTML5如何通过Vedio标签实现视频循环播放,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!要实现网页播放视频在HTML5以前是通过<e...
    99+
    2023-06-09
  • vue如何通过video.js解决m3u8视频播放格式问题
    这篇文章主要介绍了vue如何通过video.js解决m3u8视频播放格式问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。第一种方法1.在v...
    99+
    2024-04-02
  • 如何通过递归方法实现用json-diff渲染json字符串对比结果
    目录前言分析json-diff的结构用递归方法拼接json字符串字符串修改非数组对象修改数组对象修改总结前言 上一篇,对比了js-diff和json-diff,发现js-diff对比...
    99+
    2022-12-08
    json-diff渲染json字符串 json diff
  • HTML中如何通过PHP调用C++
    这篇文章给大家分享的是有关HTML中如何通过PHP调用C++ 的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、在本地服务器目录下新建一个 test 文件夹,在此文件夹中新建文件...
    99+
    2024-04-02
  • 如何通过C++编写一个简单的音频播放器程序?
    随着计算机技术的进步,音频播放器已经成为人们的日常生活中必不可少的工具。而在C++编程领域,如何编写一个简单的音频播放器程序呢?在本文中,我们将会探讨这个话题。一、 程序的基本框架编写一个音频播放器程序的时候,最重要的是要明确程序的基本框架...
    99+
    2023-11-04
    C++ 编写 音频播放器
  • Android 8.0 中如何实现视频通话的画中画模式的示例
    Android 8.0 当中允许 Activiy 以画中画模式展现。这是一种多窗口模式的改进加强,在视频类应用中用处非常大,有了这种模式,就可以在视频通话或者观看直播的过程当中打开另外的应用而不用退出当前视频。更详细的就不再累述了,大家去阅...
    99+
    2023-05-30
    android 画中画 roi
  • C#开发中如何处理图像处理和视频处理问题
    C#开发中如何处理图像处理和视频处理问题,需要具体代码示例摘要:图像处理和视频处理在计算机视觉和媒体领域中占据重要的位置。本文将介绍如何使用C#编程语言处理图像和视频相关的问题,并提供了具体的代码示例。在图像处理方面,我们将讨论如何读取、修...
    99+
    2023-10-22
    图像处理 视频处理 C#开发
  • C语言中如何通过指针参数返回值
    目录简单的案例深夜无聊而引发的问题回归正题简单的案例2.0链表中"迷人"的指针再度分析总结简单的案例 深夜无聊而引发的问题 一般来说,在C语言中一个函数顶多只能返...
    99+
    2023-02-24
    C语言指针 C语言参数返回值 C语言参数
  • 如何通过C++求出链表中环的入口结点
    目录题目描述:输入描述:返回值描述:示例:解题思路:测试代码:题目描述: 给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。 数据范围: n≤1000...
    99+
    2024-04-02
  • 如何通过Objective-C的枚举学习iOS中位操作.md详解
    开篇 今天在修改项目的时候,看见enum中出现了<<操作符(位操作),之前对这个一直都不了解。这次趁着项目比较清闲,抽出时间来全面了解一下位操作。 位操作 位操作是对...
    99+
    2022-05-20
    objective-c 枚举 位操作
  • 如何通过Python/C API中提供相关函数来创建Python元组
    这篇文章将为大家详细讲解有关如何通过Python/C API中提供相关函数来创建Python元组,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。如果你在Python/C API中提供 PyTu...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作