Articles of gdi +

WinSxS:如何依赖特定版本的gdiplus.dll?

我需要添加一个特定版本的GDIPlus的依赖。 这是我想要的GDI +的版本: 替代文字http://img.zgserver.com/windows/2qiv57t.png 我想确定我正在使用此版本的特定兼容性原因。 我已经添加了一个程序集清单给我的可执行文件,定义了我对GdiPlus版本的依赖 : <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.GdiPlus" pubicKeyToken="6595b64144ccf1df" version="5.1.3102.2180" processorArchitecture="x86" language="*" /> </dependentAssembly> </dependency> 除了当我运行我的应用程序,Windows的融合加载器给我一些其他版本的并行文件夹,我可以看到在Process Explorer中的gdiplus.dll: 替代文字http://img.zgserver.com/windows/hrwitz.png 它给我版本5.02.6002.18005 ,而不是5.1.3102.2180 。 所以问题是:我如何依赖于特定版本的Windows DLL?

使用visual c ++在桌面上绘制

我正在写一个opencv应用程序,使用Visual Studio VC ++控制台应用程序使用激光束进行绘制。 我想在桌面上画线。 我知道绘图函数在GDI32.dll中是可用的,但是如何将GDI32.dll与我的vc代码整合在一起困惑。 你能提出一些好的解决scheme吗?

我如何检测一个线程是否有窗口句柄?

我怎样才能以编程方式检测一个线程是否有一个给定的进程的窗口句柄? 间谍++给了我这个信息,但我需要以编程方式。 我需要在C#中执行此操作,但.net诊断库不会提供此信息。 我想间谍++是使用一些我不知道的Windows API调用。 我有权访问我正在尝试debugging的系统的代码。 我想定期embedded一些定时器调用的代码,它将检测有多less个线程包含窗口句柄并logging这些信息。 谢谢

复制另一个HBITMAP的位图

我想写一个类来包装位图function在我的程序中。 一个有用的function是从另一个位图句柄复制位图。 我有点卡住了: void operator=( MyBitmapType & bmp ) { HDC dcMem; HDC dcSource; if( m_hBitmap != bmp.Handle() ) { if( m_hBitmap ) this->DisposeOf(); // copy the bitmap header from the source bitmap GetObject( bmp.Handle(), sizeof(BITMAP), (LPVOID)&m_bmpHeader ); // Create a compatible bitmap dcMem = CreateCompatibleDC( NULL ); m_hBitmap = CreateCompatibleBitmap( dcMem, m_bmpHeader.bmWidth, m_bmpHeader.bmHeight ); […]

C#通用GDI +使用Image.Save()时出错

我是一个相对新手在C#中的成像。 这是我在成为会员很长一段时间后在这个委员会的第一个问题。 我希望它能帮助我解决这个棘手的情况。 我需要阅读一个Multi Page TIFF的内容(框架),将每一个内容保存到一个List中,最后返回,然后做一些工作。 inheritance人我的代码到目前为止 public static List<Image> GetAllPages(string file) { images = new List<Image>(); using (Image img = Image.FromFile(file)) { try { for (int i = 0; i < img.GetFrameCount(FrameDimension.Page); i++) { img.SelectActiveFrame(FrameDimension.Page, i); MemoryStream byteStream = new MemoryStream(); img.Save(byteStream, ImageFormat.Tiff); images.Add(Image.FromStream(byteStream)); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } return […]

Windows字体安装后不能立即在应用程序中使用?

每当我在Windows 2003服务器上安装一个新的字体,我不能立即在我的asp.net web应用程序中使用它。 应用程序通过CreateFontIndirect gdi32.dll win api获取字体,然后使用此字体在我的asp.net应用程序中创builddynamic文本图像。 似乎字体得到caching的地方,因为我只会得到返回的默认字体。 字体caching在重新启动后得到更新,然后我得到正确的字体,但显然我不想在生产服务器上重新启动一个新的字体。 有没有办法刷新字体caching?

如何在win32 c ++中打印预览?

我有一个绘图function,只需要一个HDC。 但是我需要展示一个精确的缩放版本。 所以目前我用打印机HDC和CreateCompatibleBitmap()与打印机的HDC一起使用CreateCompatibleDC()。 我以这种方式计算DC将具有打印机的确切宽度和高度。 而当我select字体到这个HDC,文本将按照打印机的规模。 不幸的是,我不能用StretchBlt()将HDC的像素复制到控制的HDC,因为它们是我猜想的不同的HDCtypes。 如果我使用与打印机页面相同的w,h作为窗口HDC创build“内存canvas”,字体会自动缩小为屏幕,而不是页面。 我应该CreateCompatibleDC()从窗口的DC和CreateCompatibleBitmap()从打印机的DC或什么? 如果有人能解释正确的方法来做到这一点。 (而且还有一些和打印机一样的东西) 那么,我会很感激! …史蒂夫

用GDI +绘图文本

我已经search了几天,现在find一个可能性,以显示我的GDI +应用程序的文本。 我尝试使用GDI +的DrawString()函数,但MSDN上的引用不起作用,因为它与参数列表不匹配。 我正在使用Visual C ++ 2010 Express。 我改变了MSDN的例子来编译,像这样: LinearGradientBrush* myBrush = new LinearGradientBrush(Rect(0,0,width,height),Color::Red, Color::Yellow, LinearGradientMode::LinearGradientModeHorizontal); Font* myFont = new Font(hdc); RectF rect = RectF(10,10,100,100); graphics.DrawString(TEXT("Look at this text!"),100, myFont,rect,&StringFormat(0,0), myBrush); 我还尝试了另外两个function: TextOut(hdc,10,10,TEXT("Text"),6); DrawText(hdc,TEXT("Text"),0,LPRECT(0),0); 没有一个在屏幕上显示文字。 画线,椭圆等没有问题。 为什么上面的文本绘图程序没有工作? 任何人都可以提供一个工作的例子?

获取与我的窗口重叠的所有窗口

我想find所有窗口完全或部分重叠我的窗口(在它的顶部)。 作为一个特例,如果我有两个窗口句柄(hWnd1和hWnd2),我想查找hWnd2是否部分或完全重叠了hWnd1。 有问题的窗口是桌面窗口(而不是在同一过程中的小孩/兄弟姐妹)。

GDI得到了加速。 有谁知道这是什么时候发生的?

为了勾画这个问题的背景:在工作中,我们使用Dell Precision工作站。 我目前使用的是NVidia Quadro FX1700。 我的团队正在开发用于实时数据采集系统的graphics组件。 所以我们总是看着graphics操作是否占用了太多的CPU时间。 对于快速检查,我们有几个testing程序,我们运行,以指定的速度(例如10帧/秒)绘制场景,我们使用普通的旧任务pipe理器来查看CPU使用情况。 其中一个程序是GDI的DrawRectangle调用(这是填充)的沉重。 这个程序一直用来消耗大约40%的CPU用户时间,但大约一年左右(只是在这里猜测),它只使用大约2-3%的内核时间。 所以很显然,这里正在进行一些硬件加速。 事实上,如果我打开HW-accell,我们又回到原来的40%的用户时间。 所有这些当然都是好消息,因为我们已经在考虑去OpenGL了。 年复一年的GDI从来没有得到硬件加速的好处。 直到前一段时间。 有没有人对此有更多的了解? 微软做了这个吗? 还是gfx卡供应商具体? 编辑 thnx的答案已经(Ferrucio,Torlack和罗布·沃克),但我的问题还没有得到答复。 我们在这里谈论一个填充矩形。 可能是最简单的function优化:只需发送一些坐标到GPU,让它撕裂。 然而它总是在CPU端执行。 到目前为止,答案让我相信,NVidia终于看到了光(超过10年)和加速GDI。 并没有公布这个? 根本没有任何信息可以find。 我的内部客户问我关于graphics加速的问题,我只能说“我们很幸运”。 EDIT2 根据不同的答案,这似乎是司机有关。 那么,NVidia多年来为其工作站卡制作了蹩脚的GDI驱动程序。 GDI没有加速,所有的testing证实了这一点。