问题标签 [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.
gdi - 如何使用 Direct2D api 滚动窗口内容?
我想通过 ID2D1RenderTarget 滚动使用 Direct2D api 执行绘图的窗口内容。
在 GDI 中,我可以使用 CreateCompatibleDC 创建一个缓冲区,然后使用 ScrollDC 滚动其内容,重绘暴露区域并将缓冲区 BitBlt 到窗口。
我在 Direct2D 中看不到任何必要的 API 来执行相同的操作。如何在不使用 GetDC(和 GDI)以及不使用自己的第三个缓冲区的情况下实现相同的功能?
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 论坛上问过这个问题,但到目前为止我还没有得到答案。
delphi - FMX Direct 2D 问题
大家下午好!
我目前的一个项目遇到了一个相当烦人的问题。我正在我当前的一个项目中使用硬件库(Andreas Hausladen 的 NVAPI Pascal 标头翻译)。这个库允许我从 NVIDIA GPU 检索信息。我用它来检索温度,在 Firemonkey 的帮助下TAnimateFloat
,我正在调整定制表盘上的角度以指示温度。
由于 FMX 在 Windows 上默认为 Direct 2D,因此我可以使用任何各种“游戏玩家”工具(MSI Afterburner、FRAPS 等)来监控 FPS。
我遇到的问题是,当我将系统置于睡眠模式(挂起到 RAM/S3),然后再次启动它时,我的应用程序上的界面被黑屏(部分或完全),并且 UI 上什么也没有明显令人耳目一新。我定期调用 NVAPI 库的初始化并通过计时器检查结果,但这并不能解决问题。我也在运行ProcessMessages
并repaint
在父表盘上,它是子控件(因为我似乎无法找到repaint
表单或等效项)。
我尝试了各种版本的库,每个版本都存在相同的问题。下一段表明这实际上不是问题,它实际上是渲染器的错误。
我有一个解决方案,但我想知道是否有更...优雅、可用的东西。我的解决方案涉及在我的项目源代码中添加FMX.Types.GlobalUseDirect2D := False;
之前。Application.Initialize
但是,这会强制 FMX 使用 GDI+ 而不是 Direct2D。它当然可以,但是如果可以的话,我想将 D2D 作为一个选项保持打开状态。我可以FindCmdLineSwitch
根据参数打开/关闭此功能,但这仍然需要我重新启动应用程序才能从 D2D 更改为 GDI+,反之亦然。
奇怪的是,FPS 计数器(在我的例子中来自 FRAPS)表明 UI 中仍在发生活动(因为值会按预期发生变化),但 UI 本身并没有明显令人耳目一新。
这是与 Direct2D 相关的问题,还是 Firemonkey 实现的错误?更重要的是,有没有比禁用 D2D 更好的修复方法?最后,同样相关的是,是否可以在不先终止应用程序的情况下“重新初始化”应用程序(所以也许我可以允许用户在 GDI+ 和 D2D 之间切换而无需重新启动应用程序)?
direct2d - Direct2D 中的像素
深灰色线应该是黑色和 1 像素宽:
浅灰色线应该是黑色和 0.5 像素宽:
相反,它们都是 2 像素宽。如果我要求 2 像素宽,这条线是黑色的,但自然是 2 像素宽。
渲染目标与窗口的客户区大小相同。我想要像 GDI 中那样的像素精度,一个坐标 = 一个像素和纯色......
谢谢。
windows - 使用 DirectWrite 缩放文本
有谁知道如何使用 DirectWrite/Direct2D API 实现文本缩放?我需要平滑的高精度放大/缩小大量文本,但找不到任何演示/示例。
谢谢。
xaml - 如何将 XAML 画笔转换为 Direct2D 画笔?
我正在开发 Metro Style 应用程序。在 Metro 中,您可以混合使用 XAML 和 DirectX。我正在创建一个 XAML 用户控件,它使用共享表面在 Direct2D 中呈现某些内容。我希望能够在 XAML 中指定一个画笔,我可以使用它来填充 Direct2D 中的几何图形。
我认为我需要能够将Windows::UI::Xaml::Media::Brush转换为ID2D1Brush。
directshow - 将 Direct2d 渲染到现有内存中
我想在 DirectShow 就地视频转换过滤器中使用 Direct2D 在视频顶部呈现文本和图像。为了避免额外的副本,我实现了我自己的 IWICBitmap 子类包装媒体样本缓冲区并使用 CreateWicBitmapRenderTarget 使 Direct2D 写入该内存。我的问题是,我是否错过了将现有内存包装成位图的内置 WIC 类?
direct2d - Direct2D:保持窗口渲染目标的区域不变
我正在绘制HwndRengerTarget
与 Direct2D 无关的常规但其他窗口重叠它。
问题是当我绘制到HwndRengerTarget
.
我想告诉 Direct2D 不要触摸特定区域HwndRengerTarget
(即不要触摸屏幕上已经存在的像素),以便这些窗口保持正确可见。
那可能吗?
如果我正常绘制然后RedrawWindow
在窗口上调用,它会闪烁很多。
谢谢。
matrix - 使用 Direct2D 将角映射到任意位置
我正在使用 WIC 和 Direct2D(通过 SharpDX)将照片合成为视频帧。对于每一帧,我都有找到每个角的确切坐标。虽然照片本身是标准纵横比(例如 4:3 或 16:9),但插入点不是——它们可以旋转、缩放和倾斜。
现在我知道在 Direct2D 中我可以应用矩阵变换来完成此操作……但我不确定如何。我看到的例子更多是关于应用特定的转换(例如旋转 30 度),而不是试图匹配一个确切的目的地。
鉴于我知道上面的确切坐标(A、B、C、D),有没有一种简单的方法可以将源图像映射到目标上?或者,在给定源坐标和目标坐标的情况下,我将如何生成矩阵?
direct2d - 直接 2D 矩形模糊效果
我是 Direct2D 的新手。我想在矩形上应用模糊效果。Direct2D 效果仅在 windows2008 预览版中可用。请帮助我找到解决方案。