草庐IT

windows - 带有打印机透明位图的 GDI+ DrawImage()

有没有人对如何成功绘制具有以下特征的位图有任何指示?当Graphics上下文为基于打印机HDC创建?打印机驱动程序通常不支持alpha混合-因此是否有替代方法可以将所有内容渲染到屏幕外位图并将其发送到打印机。这通常是不可行的,尤其是对于大幅面打印机的高分辨率打印。 最佳答案 那是什么打印机?普通打印机不打印白色。创建内存图像并将其“展平”(删除alphachannel),然后打印结果。 关于windows-带有打印机透明位图的GDI+DrawImage(),我们在StackOverflo

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

我有一个据称泄漏GDI的应用程序的故障转储。该应用程序在XP上运行,我可以毫无问题地将它加载到WinDbg中进行查看。以前我们使用Gdikdx.dllextension查看Gdi信息,但XP或Vista不支持此扩展。有没有人知道如何在WinDbg中查找GDI对象的使用情况。或者,我确实可以访问失败的程序(及其压力测试套件),因此如果您知道任何适用于XP和Vista(或Windows2000,尽管这不是)的“实时”调试工具,我可以在正在运行的系统上重现我们的目标)。 最佳答案 上周我一直在研究GDI泄漏查找器工具。我们还定期执行压力测

c++ - 窗口 GDI : horizontal/vertical DPI

在Windows下(通过使用::GetDeviceCaps)获取屏幕的DPI时,水平值是否始终与垂直值相同?例如:HDCdc=::GetDC(NULL);constintxDPI=::GetDeviceCaps(dc,LOGPIXELSX);constintyDPI-::GetDeviceCaps(dc,LOGPIXELSY);assert(xDPI==yDPI);::ReleaseDC(NULL,dc);这些值是否不同? 最佳答案 它可能会有所不同,但这通常只适用于打印机。可以安全地假设屏幕将始终具有相同的水平和垂直DPI。

c++ - 使用 GDI+ 和 C++ 将 JPEG 编码的屏幕截图保存到缓冲区

我从anotherarticlehereonSO改编了这段代码.它获取桌面的屏幕截图并将其写入名为“test.jpg”的文件。我有兴趣将JPEG数据直接保存到缓冲区以通过网络发送。我很确定GdipSaveImageToStream是我需要的,但我不知道它是如何工作的。GpImage参数特别令人困惑。感谢您提供的任何帮助。#include"stdafx.h"#include"windows.h"#include"gdiplus.h"usingnamespaceGdiplus;usingnamespaceGdiplus::DllExports;intGetEncoderClsid(WCHA

c# - 使用 GDI+ 绘制文本时是否可以定义精确的字体大小?

我正在使用以下代码在位图上绘制文本:using(Fontfont=newFont("Arial",10.0f,FontStyle.Bold,GraphicsUnit.Point)){//drawthetextgraphics.DrawString("Sometext",font,Brushes.White,rect,stringFormat);}效果不错。这是呈现的文本:我想让文字变大一点。如果我将11设置为字体大小,这就是我得到的:对于我想要的来说它太大了。我尝试了10.25、10.5等,但结果与10相同。我也尝试将GraphicsUnit设置为Pixel但它的行为相同(无法设置自定

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

概述这个问题的背景:在工作中,我们使用DellPrecision工作站。我目前使用的是NVidiaQuadroFX1700。我的团队正在为实时数据采集系统开发图形组件。所以我们一直在关注图形操作是否不会占用太多CPU时间。为了快速检查,我们运行了几个测试程序,它们以指定的速率(例如10fps)绘制场景,我们使用普通的旧任务管理器来查看CPU使用率。这些程序之一是大量调用GDIDrawRectangle(已填充)。这个程序过去总是消耗大约40%的CPU用户时间,但是大约一年左右(这里只是猜测)它只使用了大约2-3%的内核时间。很明显,这里正在进行一些硬件加速。事实上,如果我关闭HW-ac

.net - 是否有比 GDI GetPixel() 更快的替代方法?

我在.NET应用程序中使用来自gdi32.dll的GetPixel()对屏幕上任意位置的像素颜色进行采样。它工作正常,但对我来说这是一个主要的性能瓶颈。有没有更快的方法? 最佳答案 使用Bitmap的LockBits()方法可以快速访问像素。这将返回给您一个包含指向像素数据开始的指针的对象,您可以使用不安全代码访问内存。https://web.archive.org/web/20150330113356/http://bobpowell.net/lockingbits.aspx 关于.n

windows - 如何获取与进程关联的 GDI 对象

我正在调查我们的一个智能客户端应用程序中的GDI泄漏问题。我正在寻找一种工具(如tasklist)来获取与进程关联的GDI对象。我可以在任务管理器中看到GDI对象,但我需要在某处定期捕获它。例如在文本文件中。 最佳答案 使用GetGuiResources编写一个程序来定期记录进程使用的GDI句柄数应该非常简单。API函数。 关于windows-如何获取与进程关联的GDI对象,我们在StackOverflow上找到一个类似的问题: https://stackov

windows - 为所有 Win32 程序员在 Windows Aero Glass(DWM、GDI、GDI+)上绘图的文档和 API 示例

我正在寻找学习使用Win32/GDIAPI或任何替代它的好资源,以使用Win32API直接在玻璃窗体上绘制和绘画。虽然我使用的是Delphi,但我将其标记为Delphi或VisualC++。如果您能找到任何代码示例和文章,我们将不胜感激。MSDN的文章好像没有写这个。作为一个目标,假设您想要:(a)重现GoogleChrome的功能(标签作为玻璃框架的一部分)(b)重现MSOffice2010的功能(玻璃框上的保存按钮,在MFCforVS2010中称为“快速访问工具栏”(见下图)。我没有使用MFC,但如果检查MFC源代码是一个很好的信息来源,我很想知道MFC源代码或BCG原始源代码(我

c# - 在 GDI+ 中调整大小时出现 Ghost-borders ('ringing' )

发生的情况(仅在某些图像上很明显)是我会看到一个1像素的白色边框,该边框内嵌一个像素。它似乎发生在明亮但不是白色的区域(例如天空)。这类似于某些东西过度锐化并且在高对比度边缘旁边可以看到重影边界。这是完美重现它的重现代码。我正在使用所有最高质量的缩放设置。ImageCodecInfoencoder=null;EncoderParametersencoderParams=null;foreach(ImageCodecInfocodecinImageCodecInfo.GetImageEncoders()){if(codec.MimeType=="image/jpeg"){encoder=