问题标签 [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.

0 投票
2 回答
2872 浏览

text - How to implement the outline effect on text with WindowsAPICodePack?

I'm still struggling on this issue after our other requirements are finished. I found we can use GeometrySink alike classes to implement the outline effect; but I'm not familiar with c++; see this article: http://msdn.microsoft.com/en-us/library/dd317121.aspx

More complex shapes can be created by using the ID2D1GeometrySink interface to specify a series of figures composed of lines, curves, and arcs. The ID2D1GeometrySink is passed to the Open method of an ID2D1PathGeometry to generate a complex geometry. ID2D1SimplifiedGeometrySink can also be used with the DirectWrite API to extract path outlines of formatted text for artistic rendering.

If you have any suggestions or ideas, please let me know.

Best regards, Howard

0 投票
2 回答
4471 浏览

gdi+ - 用 PInvoked GDI 和透明 PNG 替换 GDI+ DrawImage

我在 C# 中创建了一个图像服务,它采用基础层图像 (JPG),再一层透明 PNG(32 位),然后输出最终的 JPG 图像。我试图从这个函数中挤出每一毫秒,我的代码在 GDI+ 中的 DrawImage 调用中遇到瓶颈。这里的托管代码:

现在,我阅读了通过 P/Invoke 直接调用 GDI 获得的性能提升,并尝试替换 DrawImage 调用。我创建了一个单元测试来尝试复制加载 JPG 然后在其上分层一个透明 PNG 的相同功能。

参考:http ://social.msdn.microsoft.com/Forums/en-US/winforms/thread/29582142-0068-40dd-bd99-4b3883a76350

但这无法产生分层图像。只是没有基本 JPG 的 PNG。我应该做些什么不同的事情?当谈到直接的 GDI 时,我有点出类拔萃。

0 投票
2 回答
5666 浏览

c++ - 使用 Direct2D 渲染位图的一部分

我正在将自定义 CAD 软件从 GDI 转换为 Direct2D。我在平移绘图时遇到问题。我想做的是创建一个与绘图窗口一样宽 3 倍且高 3 倍的位图。然后,当用户开始平移时,我会渲染应该可见的位图部分。

麻烦的是,它看起来好像你的位图不能比你的渲染目标大。到目前为止,我所做的大致如下:

因此,当我检查位图的大小时,它检查正常 - 这是我的位图渲染目标的大小,而不是我的 hwnd 渲染目标的大小。但是如果我将 x1 & y1 设置为 0,它应该绘制位图的左上角(这是屏幕外的一些几何图形)。但它只是绘制屏幕上的左上角

有人对这个有经验么?如何创建一个相当大的位图,然后在较小的渲染目标上渲染它的一部分?由于我正在平移,因此每次鼠标移动都会进行渲染,因此它必须具有合理的性能。

0 投票
1 回答
2324 浏览

c++ - C++ Direct2D 矩阵变换镜像

我目前正在学习 DirectX(2010 年 6 月的 SDK)并且正在将位图绘制到屏幕上。现在我希望能够对这些图像进行转换,并且无法沿 x 轴或 y 轴镜像图像。

在绘图之前,我可以设置一个将应用于绘图操作的转换矩阵。尽管 DirectX 使用的是 D2D1_MATRIX_3x2_F 类型,但根据 MSDN,只有该矩阵的 2x2 部分用于转换。例如,矩阵 { [1, 0], [0, 1], [0, 0] } 是使所有内容自然显示的单位矩阵。

据我了解,沿 x 轴镜像图像的矩阵变换应如下所示:{ [1, 0], [0, -1], [0, 0] },沿 y 轴然后将是 { [-1, 0], [0, 1], [0, 0] }。但是,如果我使用这些矩阵进行转换,则会出现黑屏。

对我来说,问题是,我有点卡在这一点上,不知道这个问题可能是由什么引起的,或者更确切地说,它是由背后的数学逻辑错误引起的,还是由实现本身引起的。不幸的是,除了 Direct2D RenderTarget 的头文件中的一行注释“必须通过矩阵转换完成镜像”之外,我找不到任何材料。

我目前用于测试的源代码是:

0 投票
1 回答
402 浏览

directx - 从 ID2D1PathGeometry 检索路径段

我目前正在尝试使用 SlimDX 在 C# 中编写一个小游戏引擎,只是为了好玩。

我希望我的世界是可破坏的,所以我必须能够修改我的地图。我的地图目前是基于矢量的,由ID2D1PathGeometry(SlimDX 中的 PathGeometry)对象表示。使用ID2D1Geometry(SlimDX中的几何)的 CombineWithGeometry 方法修改此对象。

为了进行合理的碰撞检测,我需要了解我的 ID2D1PathGeometry 对象的确切形状,例如计算球在墙壁上弹跳的角度。

那么,是否可以访问我的 ID2D1PathGeometry 对象的所有或特定(每个位置)段/线/点?还是有其他更好的方法来实现我的目标,例如将所有线条和形状额外存储在另一个数据结构中?

请注意,基于位图的地图不是这里的方法,因为我不想将内存作为地图大小的限制。

最好的问候, Emi

0 投票
3 回答
10991 浏览

direct2d - 如何使用 Direct2D 处理像素

有人可以提供一个使用 Direct2D 处理像素的有效方法的示例吗?

例如,如何将渲染目标上的所有绿色像素 ( RGB = 0x00FF00) 与红色像素 ( ) 交换?RGB = 0xFF0000标准方法是什么?可以ID2D1HwndRenderTarget用于那个吗?在这里,我假设使用某种硬件加速。我应该为直接像素操作创建不同的对象吗?

使用 DirectDraw 我会在with 逻辑操作上使用BltFast方法。IDirectDrawSurface7Direct2D有类似的东西吗?

另一项任务是动态生成复杂图像,其中每个点的位置和颜色都是数学函数的结果。举个例子,让我们简化一切并绘制Y = X ^ 2。如何用 Direct2D 做到这一点?最终我将需要绘制复杂的函数,但如果有人能给我一个简单的例子Y = X ^ 2

0 投票
2 回答
2049 浏览

c++ - Direct2D 设备中的 C++ 绘图弧

我需要在 D2D 设备中绘制弧线,是否有执行此操作的函数?(类似于 DrawLine 或 DrawEllipse)否则,我已经看到有返回 D2D1_ARC_SEGMENT 结构的 ArcSegment 函数,我该如何绘制?

0 投票
2 回答
896 浏览

c++ - 如何使鼠标移动无延迟?

我正在制作一个程序,让我点击两个同心圆的中心,然后通过鼠标移动,改变它的位置,我可以用它的半径做同样的事情。问题是鼠标移动之后是来自画圆的延迟响应,使半径跟随鼠标而不是在移动过程中完全处于同一位置。

你们知道如何让它像这样工作吗?紧随其后的图纸。

一些处理鼠标点击和移动的代码:

0 投票
2 回答
2590 浏览

asp.net - 通过 SharpDX 渲染 Direct2D 图像时,如何使用内存流而不是文件?

设置

考虑使用SharpDX(Direct* 库的托管包装器)的给定临时程序来呈现位图并将其保存为 PNG:

运行该程序会在程序的工作目录中为您提供一个“test.png”文件,其中包含以下漂亮的图像:

输出图像

问题

太棒了,我刚刚使用 Direct2D 而不是 GDI+ 渲染了一个图像,据说在 ASP.NET 应用程序的上下文中更受支持。另外,Direct2D 是新的热点。

假设我想编写一个函数来渲染这样的图像并将 PNG 作为 aStreambyte[]数组返回,在内存中执行整个渲染和编码操作,而不是写入文件系统。这是为了响应 Web 请求;将其直接流式传输到浏览器而不通过文件系统是有意义的。

在 GDI+ 中,我可以MemoryStream很容易地做到这一点,但在不知道缓冲区大小的情况下,我无法弄清楚如何DataStream在 SharpDX 中发挥我的优势:

  • 我是否必须 P/InvokeCreateStreamOnHGlobal并使用它IntPtr来构建我的DataStream
  • DataStream我错过了一些超载吗?
  • 有没有一种简单的方法来预先计算保存编码的 PNG 图像所需的必要缓冲区?
  • 或者我应该只是通过文件系统克服?

谢谢你的帮助!

0 投票
1 回答
1536 浏览

c++ - 使对象跟随鼠标

与该主题相关的其他问题似乎并不能帮助我很好地理解它。我刚刚开始使用 Visual Studio 和 Direct2D 进行编程,但我无法理解如何制作两个“眼睛”,它们是椭圆内的椭圆,跟随我的鼠标。

void MainWindow::CalculateLayout()在我正在使用的函数内部

设置眼睛和眼球所在的位置。我认为应该使用类似的东西控制鼠标的位置。我试图从一个空白项目而不是从一个表格中做到这一点。解决方案是否可以简单地替换const float x5=x-100为 的XMouseMove