问题标签 [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 投票
3 回答
2814 浏览

gdi - 如何使用 Direct2D api 滚动窗口内容?

我想通过 ID2D1RenderTarget 滚动使用 Direct2D api 执行绘图的窗口内容。

在 GDI 中,我可以使用 CreateCompatibleDC 创建一个缓冲区,然后使用 ScrollDC 滚动其内容,重绘暴露区域并将缓冲区 BitBlt 到窗口。

我在 Direct2D 中看不到任何必要的 API 来执行相同的操作。如何在不使用 GetDC(和 GDI)以及不使用自己的第三个缓冲区的情况下实现相同的功能?

0 投票
1 回答
573 浏览

directx - VirtualSurfaceImageSource 的闪烁问题

我正在考虑在我的应用程序中使用VirtualSurfaceImageSource,并且我已经实现了类似于Direct2D 杂志应用示例的东西,但是当虚拟表面比显示区域大几倍时,我遇到了一个问题。

基本上,我有一个水平滚动ScrollViewer,其中包含一个Image. 图像的来源是宽的VirtualSurfaceImageSource(至少 ~10000 x 500 像素)。的宽度ScrollViewer为 1280 像素。

当我通过触摸平移滚动滚动查看器时,图像有时会闪烁 - 图像的一部分消失,然后重新绘制。这通常发生在惯性滚动停止时。图像在滚动到视图时已经完全绘制,但由于某种原因它被清除并被IVirtualSurfaceUpdatesCallbackNative::UpdatesNeeded()调用。

我上传了一个说明问题的视频。观察滚动停止时会发生什么(在 0:02、0:17 等...)

任何想法为什么会发生这种情况?

我还注意到,如果图像宽度约为 5000 像素或更小,则不会发生闪烁。


如果您想重现此内容,请从Direct2D 杂志应用示例开始,并在 Sample.story 中的<text name="butterfly-body">标签下添加更多文本 - 只需将现有文本复制 10 次左右。尝试以不同的速度双向滚动蝴蝶页面,您应该会看到似乎是相同的问题。

我在MSDN 论坛上问过这个问题,但到目前为止我还没有得到答案。

0 投票
1 回答
1080 浏览

delphi - FMX Direct 2D 问题

大家下午好!

我目前的一个项目遇到了一个相当烦人的问题。我正在我当前的一个项目中使用硬件库(Andreas Hausladen 的 NVAPI Pascal 标头翻译)。这个库允许我从 NVIDIA GPU 检索信息。我用它来检索温度,在 Firemonkey 的帮助下TAnimateFloat,我正在调整定制表盘上的角度以指示温度。

由于 FMX 在 Windows 上默认为 Direct 2D,因此我可以使用任何各种“游戏玩家”工具(MSI Afterburner、FRAPS 等)来监控 FPS。

我遇到的问题是,当我将系统置于睡眠模式(挂起到 RAM/S3),然后再次启动它时,我的应用程序上的界面被黑屏(部分或完全),并且 UI 上什么也没有明显令人耳目一新。我定期调用 NVAPI 库的初始化并通过计时器检查结果,但这并不能解决问题。我也在运行ProcessMessagesrepaint在父表盘上,它是子控件(因为我似乎无法找到repaint表单或等效项)。

我尝试了各种版本的库,每个版本都存在相同的问题。下一段表明这实际上不是问题,它实际上是渲染器的错误。

我有一个解决方案,但我想知道是否有更...​​优雅、可用的东西。我的解决方案涉及在我的项目源代码中添加FMX.Types.GlobalUseDirect2D := False;之前。Application.Initialize但是,这会强制 FMX 使用 GDI+ 而不是 Direct2D。它当然可以,但是如果可以的话,我想将 D2D 作为一个选项保持打开状态。我可以FindCmdLineSwitch根据参数打开/关闭此功能,但这仍然需要我重新启动应用程序才能从 D2D 更改为 GDI+,反之亦然。

奇怪的是,FPS 计数器(在我的例子中来自 FRAPS)表明 UI 中仍在发生活动(因为值会按预期发生变化),但 UI 本身并没有明显令人耳目一新。

这是与 Direct2D 相关的问题,还是 Firemonkey 实现的错误?更重要的是,有没有比禁用 D2D 更好的修复方法?最后,同样相关的是,是否可以在不先终止应用程序的情况下“重新初始化”应用程序(所以也许我可以允许用户在 GDI+ 和 D2D 之间切换而无需重新启动应用程序)?

0 投票
2 回答
4925 浏览

direct2d - Direct2D 中的像素

在此处输入图像描述

深灰色线应该是黑色和 1 像素宽:

浅灰色线应该是黑色和 0.5 像素宽:

相反,它们都是 2 像素宽。如果我要求 2 像素宽,这条线是黑色的,但自然是 2 像素宽。

渲染目标与窗口的客户区大小相同。我想要像 GDI 中那样的像素精度,一个坐标 = 一个像素和纯色......

谢谢。

0 投票
1 回答
301 浏览

windows - 使用 DirectWrite 缩放文本

有谁知道如何使用 DirectWrite/Direct2D API 实现文本缩放?我需要平滑的高精度放大/缩小大量文本,但找不到任何演示/示例。

谢谢。

0 投票
1 回答
231 浏览

xaml - 如何将 XAML 画笔转换为 Direct2D 画笔?

我正在开发 Metro Style 应用程序。在 Metro 中,您可以混合使用 XAML 和 DirectX。我正在创建一个 XAML 用户控件,它使用共享表面在 Direct2D 中呈现某些内容。我希望能够在 XAML 中指定一个画笔,我可以使用它来填充 Direct2D 中的几何图形。

我认为我需要能够将Windows::UI::Xaml::Media::Brush转换为ID2D1Brush

0 投票
1 回答
804 浏览

directshow - 将 Direct2d 渲染到现有内存中

我想在 DirectShow 就地视频转换过滤器中使用 Direct2D 在视频顶部呈现文本和图像。为了避免额外的副本,我实现了我自己的 IWICBitmap 子类包装媒体样本缓冲区并使用 CreateWicBitmapRenderTarget 使 Direct2D 写入该内存。我的问题是,我是否错过了将现有内存包装成位图的内置 WIC 类?

0 投票
3 回答
2499 浏览

direct2d - Direct2D:保持窗口渲染目标的区域不变

我正在绘制HwndRengerTarget与 Direct2D 无关的常规但其他窗口重叠它。

问题是当我绘制到HwndRengerTarget.

我想告诉 Direct2D 不要触摸特定区域HwndRengerTarget(即不要触摸屏幕上已经存在的像素),以便这些窗口保持正确可见。

那可能吗?

如果我正常绘制然后RedrawWindow在窗口上调用,它会闪烁很多。

谢谢。

0 投票
2 回答
1056 浏览

matrix - 使用 Direct2D 将角映射到任意位置

我正在使用 WIC 和 Direct2D(通过 SharpDX)将照片合成为视频帧。对于每一帧,我都有找到每个角的确切坐标。虽然照片本身是标准纵横比(例如 4:3 或 16:9),但插入点不是——它们可以旋转、缩放和倾斜。

在此处输入图像描述

现在我知道在 Direct2D 中我可以应用矩阵变换来完成此操作……但我不确定如何。我看到的例子更多是关于应用特定的转换(例如旋转 30 度),而不是试图匹配一个确切的目的地。

鉴于我知道上面的确切坐标(A、B、C、D),有没有一种简单的方法可以将源图像映射到目标上?或者,在给定源坐标和目标坐标的情况下,我将如何生成矩阵?

0 投票
1 回答
575 浏览

direct2d - 直接 2D 矩形模糊效果

我是 Direct2D 的新手。我想在矩形上应用模糊效果。Direct2D 效果仅在 windows2008 预览版中可用。请帮助我找到解决方案。