问题标签 [direct2d]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - GDI 与 Direct2D
我现在正在编写一个模拟程序,我想将我的应用程序从使用 GDI 移植到使用 Direct2D。但是我的 Direct2D 代码比我的 GDI 代码慢得多。
我在屏幕上渲染了很多椭圆。在我的 GDI 应用程序中,我绘制到内存设备上下文,然后使用 BitBlt 在 Windows 设备上下文上绘制。使用 Direct2D,我在 ID2D1HwndRenderTarget 上绘图。
我的问题是,当使用 GDI 时,我可以轻松绘制 400 多个椭圆并且仍然有 400 FPS。当我用 Direct2D 做相同数量的椭圆时,我的 FPS 下降到 30FPS。
我已经关闭了抗锯齿,但它并没有真正帮助。有趣的是,与 GDI 相比,在 Direct2D 中仅绘制几个椭圆会更快。我可以做些什么来提高 Direct2D 的性能,还是应该让我的应用程序继续使用 GDI?
这是我使用 GDI 绘制的代码:
在我的 Begin 和 End 函数之间,我以标准 GDI 方式绘制椭圆。
这是我使用 Direct2D 的开始和结束函数:
下面是我设置 Direct2D 接口的方法。一切都在课堂上;这就是为什么我不能发布完整的代码:
先感谢您。
c++ - MFC & Kinect: draw a line on Kinect's image
I am currently working with Kinect, and I want to draw the bones of a skeleton on the VGA image of the kinect. First, I get the picture from the kinect:
Here we have it in a NUI_LOCKED_RECT, so we can do anything with it. The most common way is to just convert it to a bitmap and put it on the screen, but I want to make some modifications to the image. I use Direct2D to bring it on the screen, so I need an image format that can be converted to ID2D1Bitmap, and I must be able to draw lines and points on it. What kind of image do I need?
graphics - 在 DirectX 上限制绘图区域
我正在使用 Direct2D 绘制自定义图表。该图表在图表一侧绘制了 x 轴和 y 轴标签。当我垂直缩放图表时,一些数据将绘制在 x 轴标签的顶部,我希望始终保持轴标签的清洁。将绘画区域限制为自定义矩形而不是整个控件的最佳方法是什么?
我有几个想法,但我不确定是否有更好的方法来做到这一点:
方法1)
使用 GDI 样式并在一个面板上绘制图表区域,在另一个面板上绘制轴标签。这样,当我绘制到图表面板时,我就不会弄乱轴标签。问题是我将不得不制作更多的 Direct2D 对象(至少为每个控件 (hWnd) 呈现目标),并且我不确定这样做会影响性能。
方法2)
每次更新轴标签时将其复制到位图,然后在图表面板命令之后将这些位图绘制到控件顶部。这比方法1便宜吗?
方法3)
在每次绘图操作中手动检查像素位置,并在必要时进行修改。这似乎是最糟糕的选择。
编辑:
方法4)
与方法 1) 相同,但使用 GDI+ 绘制轴标签并仅对图表使用 Direct2D。
方法5)
使用 ID2DLayer。我刚刚从MSDN 文档中找到了这个功能。这似乎是我正在寻找的东西,但它带有许多关于频繁使用的性能影响的警告。
你的意见?
c++ - C++ Direct 2D 如何调整 ID2D1Bitmap 的大小
我正在为自己正在制作的游戏制作一个简单的 GUI 库,并且每个控件都需要有一个位图,以便在控件需要重绘时绘制到该位图。当它不需要重绘时,它将有一个已经制作好的位图准备显示到屏幕上。由于可以调整控件的大小,因此也需要调整此 Bitmap 的大小,以便可以正确地将控件完全绘制到其中。我该如何实现这一点,因为它似乎不是调整位图大小的 Resize 方法,不像 ID2D1HwndRenderTarget,它可以调整大小?
directx - 如何在白色的地方用透明渲染 ID2D1Bitmap
你好,我正在写类似文件阅读器的东西。此功能之一是读取图像。一些图像是 JPG 格式。这些图像在应该透明的区域是白色的(因为 jpg 不支持 alpha 通道)。换句话说,我需要以一种有白色的地方应该是透明的方式来渲染 Direct2d 图像。有什么建议么?谢谢普热梅克
c++ - 使用带有按钮控件的 PNG
我正在尝试在我的对话框(Visual Studio 2010 Professional)的按钮控件上呈现 PNG。经过一番研究,我发现以下适用于 BMP 文件的方法:
但是,这不适用于 PNG 文件。经过更多研究,我发现使用 GDI+ 有一种简单的方法可以做到这一点:
我没有在我的程序中的任何其他地方使用 GDI+,但我仍然需要包含标题、链接到库并初始化它以完成这个简单的任务。值得所有这些麻烦吗?有没有更标准的方法来做到这一点?
我计划在一个按钮上渲染多个 PNG(有些是透明的)。
编辑:我用来创建 HBITMAP 的(稍作修改的)CreateDIBSectionFromBitmapSource() 函数可以在这里找到:
scroll - 如果 Direct2D 设置为 Graphics3D,TeeChart Scroller 会导致 RedCross 错误
我正在尝试 TeeChart .Net 组件,我专注于财务图表。当我尝试使用 PageScroller 工具来管理图表滚动时,它在 GDI 中运行良好,但在我设置 D2D 渲染时会导致红十字。
有人知道这是一个已知问题还是我在这段代码中做错了什么?
这是我添加寻呼机的方法:
这是我设置 D2D 绘图的方法(如果图表上没有寻呼机,它工作正常)
最好的,萨尔瓦多·罗西托。
gpu - ID2D1DCRenderTarget 与 ID2D1HwndRenderTarget
我正在尝试将一些 GDI/GDI+ 代码移植到 Direct2D,但对于哪种类型的目标更适合使用(DC 或 Hwnd)我仍然有点困惑,因为我发现不同的性能取决于我是否使用了显卡。特别是,我发现了以下问题:
如果我使用 DCRenderTarget 我不能使用硬件加速(或默认),因为我继续违反内存的保护区。如果我使用 HwndRenderTarget,这不会发生。
如果我使用 HwndRenderTarget,通常一切都很好,但如果我有很多窗口(如按钮),我会失去对主窗口的关注,它无法识别 KeyPressed 消息,并且,如果我使用 Gpu,性能下降很多并且强烈依赖于活动目标的数量(如果我使用软件加速则不会发生)。
有没有人遇到过同样的问题?你能推荐一些关于它的东西吗?
非常感谢!
c++ - 在 Direct2D 应用程序中处理 HRESULT
在 Kenny Kerr 关于成像和 Direct2D 的 msdn 杂志文章中,他经常使用HR()
宏。
在他的 Windows 映像组件文章中 - http://msdn.microsoft.com/en-gb/magazine/cc500647.aspx
他写 -
最后,WIC API 使用 HRESULT 来描述错误。本文中的示例使用 HR 宏来清楚地识别方法返回需要检查的 HRESULT 的位置。您可以将其替换为您自己的错误处理策略——无论是抛出异常还是自己返回 HRESULT。
然而,肯尼没有显示他的定义HR()
。我是 C++ 初学者,正在尝试发现和理解代码的细节。我想知道他的实现HR()
是什么,以便我可以考虑如何最好地处理HRESULT
我的程序。我搜索了一个定义,但似乎没有这些特定文章的源代码。
在了解相关信息时,macros
我遇到了这些建议使用inline
函数而不是宏的最新文档 -
http://msdn.microsoft.com/en-us/library/vstudio/ttsbh614.aspx
http://msdn.microsoft.com/en-us/library/vstudio/z8y1yy88.aspx
谁能告诉我肯尼是如何定义他的HR()
宏的?它实际上做了什么?
我的 Direct2D 程序应该如何处理HRESULT
s?如何正确使用HRESULT
s 以使程序可靠且有弹性?
mfc - 使用 Direct2D 的透明窗口
我有一个 MFC 应用程序,我想使用 Direct2D 来绘制我的自定义控件。
我需要我的控件是透明的。我曾经通过欺骗 OnEraseBkgnd 并调用afxGlobalData.DrawParentBackground
.
使用 Direct2D,我使用 ID2D1HwndRenderTarget 并BeginDraw/EndDraw
从 OnPaing 方法调用。问题是即使不调用任何绘图/清除函数,此方法也会将整个区域清除为黑色。
有没有办法在 Direct2D 中绘制透明图像???
谢谢!