Tag: directx

使用C#截取任何外部应用程序

我们有一个C#(WPF)应用程序,我们想在其中截取我们发布的任意应用程序的截图(即我们引用了我们开始的流程)。 应用程序可以最小化或在其他窗口后面,但我们仍然只想要单个应用程序的图像,而不是重叠的像素。 我知道使用BitBlt或PrintWindow的典型P / Invoke解决方案大部分时间都可以工作,但是当处理直接绘制到图形设备的DirectX或OpenGL应用程序时,这些解决方案会失败(我只会得到黑/透明像素)。 我发现这篇文章是关于从C#截取Direct3D应用程序的截图,所以我想我已经涵盖了这个案例。 所以我的问题是: 我如何为OpenGL应用程序执行此操作? 确定适当使用方法(PW / DX / GL)的最简单方法是什么? 有没有一种通用的方法来做到这一点? 对于#2,我是否会降级检查可执行文件加载的模块,看看是否加载了DirectX或OpenGL DLL / Assembly? 这只需要在Windows XP上运行(不是跨平台,如果有的话,不会很快转到Vista / 7)。

使用Microsoft.DirectX.AudioVideoPlayback播放video时出错; 程序集版本错误

我试图在基于c#windows form的应用程序上嵌入video,使用程序集Microsoft.DirectX.AudioVideoPlayback但是得到以下错误 Mixed mode assembly is built against version ‘v1.1.4322’ of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information. 我正在使用Visual Studio 2010 .NET版本4.0还安装了Microsoft DirectX SDK任何链接更新版本的库或任何替代? 码: using Microsoft.DirectX.AudioVideoPlayback; namespace MathBook { public partial class Form1 : Form { Video vd; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, […]

在directx 11中渲染h264video帧

我是DirectX新手。 我正在尝试编写一个自定义IP摄像机video播放器,我正在使用DirectX11以Wpf Gui作为我的前端渲染解码图像。 我是一个c#开发人员 ,并使用了托管的directx,不再由microsoft更新,因此转移到wpf和directx11。 我的应用程序的所有部分直到帧的渲染工作正常。 我已经设法创建了一个D3DImage源,它将在Wpf应用程序中使用,成功创建我的视口和我的设备,包括我的共享资源,因为D3DImage仅适用于Directx9。 我使用SharpDX作为DirectX API的包装器。 现在我的问题是我似乎无法找到一种方法来创建纹理/从解码的图像字节更新纹理,或者这样做的正确方法是从接收的字节渲染解码图像。 任何有关这方面的帮助都会很棒,或者有人可以指导我如何接近这个方向的正确方向? 谢谢。

多重采样不能在独占模式下工作

我想在绘制三角形时启用多重采样,如下图所示: 我在另一个问题中找到了一种与SlimDX有关的方法,但它不能在独占模式下工作。 这是我的代码: void Form1_Load(object sender, EventArgs e) { Direct3D d3d = new Direct3D(); PresentParameters presentParams; presentParams.Windowed = false; presentParams.BackBufferFormat = Format.X8R8G8B8; presentParams.BackBufferWidth = 800; presentParams.BackBufferHeight = 600; presentParams.FullScreenRefreshRateInHertz = 60; presentParams.SwapEffect = SwapEffect.Copy; presentParams.BackBufferCount = 1; presentParams.PresentationInterval = PresentInterval.One; int multisampleQuality; Result result; if (d3d.CheckDeviceMultisampleType(adaptor, DeviceType.Hardware, Format.X8R8G8B8, false, MultisampleType.FourSamples, out multisampleQuality, out result)) { […]

原生WPF与自定义DirectX用于显示大图像

我需要加快我的图像查看器,并想知道我是否应该考虑创建自己的DirectX控件来执行此操作。 我的图像查看器显示医学图像。 它们可能非常大。 乳房X线照相术我们说的是55mb。 像素数据是存储在ushortarrays中的16位灰度级。 在没有深入细节的情况下,我目前的方法是将像素数据加载到ImageSource中,并使用WPF Image控件。 我从未对DirectX做过任何事情。 值得深入探讨吗? 它会比原生WPF更快吗? 如果这样有多大? 或者,我应该忘记DirectX并研究可以改进现有方法的领域吗? 在有人这么说之前,我知道WPF使用DirectX。 我想知道如果删除WPF层并自己编写DirectX将提高性能。

有没有想知道什么时候屏幕更新/刷新(OpenGL或DirectX可能?)

我目前有一个用c#编写的应用程序(使用.NET),要求我在用户在屏幕上看到图像时立即启动计时器,直到他们用按键响应。 现在我意识到,考虑到监视器输入滞后和响应时间,键盘物理发送消息所需的时间,处理它的操作系统等,实际上这非常困难。 但我正在尽我所能将其降低到大部分是一个恒定的错误(响应时间结果将用于比较一个用户与下一个用户,因此常量错误不是真正的问题)。 然而,令人烦恼的障碍是由监视器刷新率引起的变量,正如我在调用和完成onPaint消息时收集的那样,这并不意味着图像实际上已经被处理并从图形缓冲区发送了? 不幸的是,时间限制和其他承诺实际上会限制我在c#for Windows中继续执行此任务。 所以我想知道的是,如果可以在屏幕更新时使用OpenGL或DirectX来创建事件,那么在OpenGL或DirectX中处理所有绘图还是更好? 之前给我的另一个建议是关于V-Sync,如果我关闭它是一旦它被绘制后发送的图像? 而不是以与显示器刷新率同步的设定速率发送图像?

SlimDX:在Visual Studio 2010中看不到Direct3D调试输出

我已经安装了2010年6月的SDK 在DirectX控制面板中启用调试运行时 将调试输出级别设置为最大值(更多) 启用非托管代码调试。 结果:缺少Direct3D的调试输出 但是,如果我从外部启动应用程序并使用dbgview.exe,则会显示输出。 可能是什么原因?

如何从Native组件进行函数调用或触发事件到C#/ XAML组件?

我正在开发一个带有Native(DirectX / D3D)组件和C#/ XAML组件的WP8应用程序。 Native组件绘制到UI元素,C#/ XAML组件具有围绕它的app(和其他东西)的控件。 通常,我将信息从C#/ XAML组件发送到Native组件。 但是有些时候我想根据在Native组件中完成处理的时间来触发C#/ XAML组件中的事件。 在一个计划的function中,我设想了一个C#/ XAML进度条,它通过Native组件中触发的事件保持最新。 不幸的是,尽管有一些平庸的尝试将信息从Native组件传递到C#/ XAML,但我没有取得太大进展,我感到死在水中。 我非常感谢任何指导。 谢谢阅读。

在C#/ WPF中加速L-System渲染器

lsys是一个用CoffeeScript编写的超快 L-System渲染器。 下面是C#和WPF中的简单渲染器。 渲染此示例是硬编码的。 运行时的结果如下: 在窗口中单击鼠标将调整angleGrowth变量。 重新计算GeometryGroup以及构建Canvas通常需要不到十分之一秒。 但是,实际的屏幕更新似乎需要更长的时间。 有关如何更快或更高效的任何建议? 它目前比CoffeeScript / JavaScript版本慢…… 🙂 using System; using System.Collections.Generic; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Diagnostics; namespace WpfLsysRender { class DrawingVisualElement : FrameworkElement { public DrawingVisual visual; public DrawingVisualElement() { visual = new DrawingVisual(); } protected override int VisualChildrenCount { get { return 1; […]

如何在C#中获取矢量类型?

我想在我正在编写的C#应用​​程序中使用Vectors,然后单独使用Vector3。 如果没有自己编写Vector类型,最好的方法是什么?