问题标签 [gdi]

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 回答
1172 浏览

windows - 监控 GDI 调用

有没有一种工具可以监控 GDI 调用?

0 投票
2 回答
3272 浏览

winapi - GDI 和 GDI+ 中的多边形填充模式

当前设备上下文中的系统默认多边形填充模式是ALTERNATE(正如我从 Petzold 关于 Windows 编程的书中了解到的那样),并且这个Polygon模式用于 Win32 函数,除非您使用SetPolyFillMode.

我的问题是:GDI+ Graphics::FillPolygonFillMode在其签名中没有参数)方法是否也使用当前设备上下文填充模式或设置众所周知的默认值,然后在调用它之前设置回模式集?

谢谢!

0 投票
4 回答
1925 浏览

winapi - Win32 CreatePatternBrush

MSDN 为 CreatePatternBrush 显示以下内容:

您可以使用 DeleteObject 函数删除图案画笔而不影响关联的位图。因此,您可以使用此位图创建任意数量的图案画笔。

我的问题是相反的。如果 HBRUSH 长期存在,我可以在创建画笔后立即删除 HBITMAP 吗?IE:HBRUSH 是否存储自己的 HBITMAP 副本?

在这种情况下,我希望 HBRUSH 具有对象范围,而 HBITMAP 将具有方法范围(创建 HBRUSH 的方法)。

0 投票
2 回答
1276 浏览

windows - 如何确定 Windows 单选按钮的按钮部分的大小

我正在使用 DrawFrameControl 自己绘制旧学校(非主题 - 主题收音机是另一个问题)单选按钮:

我从来没有想出一个可靠的方法来弄清楚 RECT 应该传递什么。我一直在使用 12x12 矩形,但我希望 Windows 告诉我单选按钮的大小。

DrawFrameControl 似乎缩放单选按钮以适合我通过的矩形,因此我必须接近收音机的“正确”尺寸,使其与屏幕上的其他(非所有者绘制的)收音机相隔。

有人知道怎么做吗?

0 投票
5 回答
5961 浏览

c# - drawString 方法如何用于编写对角线方式

我正在使用 c# 2005 我想在图像上对角写入字符串。但默认情况下,c# 提供水平或垂直书写的选项。

我们如何对角书写?

谢谢

0 投票
3 回答
3273 浏览

windows - 从故障转储中查找 GDI/用户资源使用情况

我有一个应用程序的故障转储,据说该应用程序正在泄漏 GDI。该应用程序在 XP 上运行,我可以毫无问题地将其加载到 WinDbg 中查看它。以前我们使用Gdikdx.dll 扩展来查看 Gdi 信息,但 XP 或 Vista 不支持此扩展。

有没有人有任何指针可以在 WinDbg 中查找 GDI 对象的使用情况。

或者,我确实可以访问失败的程序(及其压力测试套件),因此如果您知道 XP 和 Vista(或 Windows 2000,尽管这不是我们的目标)的任何“实时”调试工具,我可以在正在运行的系统上重现.

0 投票
11 回答
2275 浏览

c++ - Heisenbug:WinApi 程序在某些计算机上崩溃

请帮忙!我真的束手无策。我的程序是一个小小的个人笔记管理器(谷歌搜索“cintanotes”)。在某些计算机上(当然我不拥有它们),它在启动后因未处理的异常而崩溃。这些计算机没有什么特别之处,只是它们往往具有 AMD CPU。

环境:Windows XP、Visual C++ 2005/2008、原始 WinApi。

这是关于这个“Heisenbug”的肯定:

1) 崩溃仅发生在 Release 版本中。

2) 一旦我删除所有与 GDI 相关的东西,崩溃就会消失。

3) BoundChecker 没有任何抱怨。

4) 写日志显示崩溃发生在声明局部 int 变量时!怎么可能?内存损坏?

任何想法将不胜感激!

更新:我已经设法在“故障”PC 上调试了该应用程序。结果:

“CintaNotes.exe 中 0x0044a26a 处未处理的异常:0xC000001D:非法指令。”

和代码中断

0044A26A cvtsi2sd xmm1,dword ptr [esp+14h]

所以似乎问题出在“代码生成/启用增强指令集”编译器选项中。它被设置为“/arch:SSE2”并且在不支持 SSE2 的机器上崩溃。我已将此选项设置为“未设置”,并且该错误消失了。呸!

非常感谢大家的帮助!!

0 投票
1 回答
1052 浏览

c++ - 在 Windows CE 6.0 中的进程之间共享 GDI 句柄

我知道 GDI 句柄在“Big Windows”中是独一无二的并且是特定于进程的,但它们在 Windows CE 6.0 中的工作方式是否相同?

例如:我有一个字体管理服务,其他几个服务和应用程序将使用它。此服务具有用于打印和显示的有效字体和配置列表;CreateFontIndirect() 已在它们中的每一个上调用。当这些客户端应用程序之一请求特定字体(和配置)时,我可以返回适当的 HFONT 吗?如果没有,是否有一种安全/有效的方法来复制句柄,例如 DuplicateHandle 用于内核句柄。

我问的原因是,我已经看到通过 PostMessage 传递给另一个应用程序的 HFONT 可以正常工作,但我不认为它们是“应该”的。

0 投票
5 回答
5841 浏览

c++ - 如何在 C++/MFC/GDI 中创建一个非常大的位图

我希望能够在 C++ MFC 应用程序中创建一个大的(比如 20,000 x 20,000)像素位图,使用 CDC 派生类写入位图。我尝试使用 MSDN 文档中描述的内存 DC,但这些似乎仅限于与当前显示驱动程序兼容的大小。

我目前正在使用位图打印驱动程序来完成这项工作,但由于假脱机 GDI 信息,它非常慢并且使用了大量的中间存储。

我正在寻找的解决方案不应该涉及元文件或假脱机,因为我正在绘制的模型需要数百万次 GDI 调用来渲染。

我可以通过多个内存 DC 使用分而治之的方法,但这似乎是一种相当繁琐和不雅的技术。

有什么想法吗?

0 投票
5 回答
2160 浏览

windows - GDI 已经加速。有谁知道这是什么时候发生的?

勾勒出这个问题的背景:在工作中,我们使用 Dell Precision 工作站。我目前有一台 NVidia Quadro FX1700。我的团队正在为实时数据采集系统开发图形组件。因此,我们一直在寻找图形操作是否不会占用太多 CPU 时间。为了快速检查,我们运行了几个测试程序,它们以指定的速率(例如 10 fps)绘制场景,并且我们使用普通的旧任务管理器来查看 CPU 使用率在哪里。其中一个程序对 GDI DrawRectangle 调用(已填充)很重。这个程序过去总是消耗大约 40% 的 CPU 用户时间,但大约一年左右(这里只是猜测)它只使用大约 2-3% 的内核时间。很明显,这里正在进行一些硬件加速。事实上,如果我关闭 HW-accell,我们' 重新回到原来的 40% 的用户时间。所有这些当然都是好消息,因为我们已经在考虑使用 OpenGL。年复一年,GDI 从未从硬件加速中受益。直到前一段时间。

有人知道更多吗?微软这样做了吗?还是 gfx 卡供应商特定的?

编辑

Thnx 已经给出了答案(Ferrucio、Torlack 和 Rob Walker),但我的问题尚未得到解答。我们在这里讨论的是填充矩形。可能是最简单的优化功能:只需将几个坐标发送到 GPU 并让它撕裂。然而,它总是在 CPU 端实现。到目前为止,答案让我相信 NVidia 终于看到了曙光(经过 10 多年)并加速了 GDI。并且没有关于这个的公告?根本找不到这方面的信息。我的内部客户问我有关图形加速的问题,我只能说“好吧,我们很幸运”。

编辑2

It does seem like it is driver related according to the different answers. So, then NVidia has made crappy GDI drivers for its workstation cards for years. It really was an accepted fact within this company that GDI was not accelerated and all the tests confirmed this.