Articles of gdi +

在GDI +中发生了一个通用错误

我有一个传统的Winforms应用程序,使用它时,造成一些奇怪的问题。 应用程序部分处理图像,用户可以将图像添加到logging,这些图像在.Net中resize,并保存到服务器共享。 我有两个使用这个应用程序的问题,都导致“GDI +中发生一般性错误”。 用户可以查看logging,图像显示正常,可以尝试打印,出现select打印机的对话框,但是当点击打印时,出现错误。 另一个是当用户尝试添加一个新的图像到一个logging,相同的一般错误。 最好的部分 – 只有两个用户有这个问题。 图像可以直接从共享打开并打印出来,没问题。 这两个用户都是同一个AD组的一部分,其他人都拥有对共享/文件的权限。 两个用户login到另一台机器上的应用程序,并做同样的工作正常。 我试过让两个人完全控制和共享文件的所有权,但仍然是相同的错误。 卸载并重新安装应用程序不起作用。 我已经login到每个受影响的用户机器和应用程序安装在每个用户的基础上,但在我的凭据在同一台计算机上安装和运行的应用程序运行良好。 任何人都有这个问题的经验,或者我应该尝试下一步? 编辑:这一切都开始时,我们将共享文件夹移动到另一台服务器。

问题与CreateDC和wglMakeCurrent

PIXELFORMATDESCRIPTOR pfd = { /* otherwise fine for a window with 32-bit color */ }; HDC hDC = CreateDC(TEXT("Display"),NULL,NULL,NULL); // always OK int ipf = ChoosePixelFormat(hDC,&pfd); // always OK SetPixelFormat(hDC,ipf,&pfd); // always OK HGLRC hRC = wglCreateContext(hDC); // always OK wglMakeCurrent(hDC,hRC); // ! read error: 0xbaadf039 (debug, obviously) 但是下面的作品与hRC相同: wglMakeCurrent(hSomeWindowDC,hRC); 以上是Windows的OpenGL 3.0+初始化系统的一部分。 我试图避免为了美观而创build一个虚拟的窗口。 我之前从未使用过CreateDC,所以也许我错过了一些东西。 编辑:hSomeWindowDC将指向一个适当的像素格式的窗口DC。 […]

屏幕捕捉特定窗口

是否有可能屏幕捕获特定的窗口(也可能是另一个进程)? 目前我正在捕获特定监视器的整个桌面,但是我真正想要的是捕获特定窗口的内容(不pipe其位置)。

如何使用GDI绘制透明文本?

我的目标是dynamic地将一些任意文本放到HICON映像中(在运行时)。我使用下面的代码: //Error checks are omitted for brevity //First create font LOGFONT lf = {0}; lf.lfHeight = -58; lf.lfWeight = FW_NORMAL; lf.lfOutPrecision = OUT_TT_PRECIS; //Use TrueType fonts for anti-alliasing lf.lfQuality = CLEARTYPE_QUALITY; lstrcpy(lf.lfFaceName, L"Segoe UI"); HFONT hFont = ::CreateFontIndirect(&lf); //HICON hIcon = original icon to use as a source //I'm using a large 256×256 pixel icon […]

Qt:QPainter + GDI在相同的部件?

我试图使用这里描述的方法在同一个小部件上使用QPainter和GDI调用。 不幸的是,这个教程似乎已经写在Qt的早期版本上,现在它不能工作。 我设置WA_PaintOnScreen标志并重新实现paintEngine()返回NULL。 然后在paintEvent()创build一个QPainter,使用它,然后使用一些GDI调用来绘制位图。 GDI调用工作正常,但QPainter什么都不做。 我在控制台上得到以下错误: QPainter::begin: Paint device returned engine == 0, type: 1 这是不是支持了? 我该怎么做? 我也尝试在GDI绘画小部件的顶部创build一个额外的小部件,但是由于顶部小部件显示为黑色并阻止了GDI小部件,所以效果不佳。

Win32:一个窗口在整个生命周期中是否具有相同的HDC?

我可以在涂料周期之外使用DC吗? 我窗口的DC是否保证永久有效? 我想弄清楚我的控件的设备上下文(DC)有效多久。 我知道我可以打电话: GetDC(hWnd); 获取我的控件窗口的设备上下文,但这是允许的吗? 当Windows向我发送WM_PAINT消息时,我应该调用BeginPaint / EndPaint来正确地确认我已经绘制了它,并在内部清除无效区域: BeginPaint(hWnd, {out}paintStruct); try //Do my painting finally EndPaint(hWnd, paintStruct); end; 但是调用BeginPaint也会在PAINTSTRUCT结构中返回一个DC。 这是我应该画的DC。 在说BeginPaint()返回的DC与我从GetDC()得到的DC相同的文档中,我找不到任何东西。 尤其是现在,在桌面组合的日子里,在BeginPaint之外获得的DC上绘制它是否有效? 似乎有2种方法可以在绘画周期中获得DC绘画: dc = GetDC (hWnd); 调用BeginPaint(&PAINTSTRUCT); 还有第三种方法,但它似乎是与我开发的Borland Delphi的一个bug。 在WM_PAINT处理期间,Delphi认为wParam是一个DC,然后继续绘制它。 而MSDN说WM_PAINT消息的wParam是未使用的。 为什么 我真正的目标是试图保持一个持久的GDI +graphics对象与一个HDC,所以我可以使用一些更好的执行function的GDI +依赖于持久性DC。 在WM_PAINT消息处理期间,我想绘制一个GDI +图像到canvas。 以下的版本非常慢: WM_PAINT: { PAINTSTRUCT ps; BeginPaint(m_hwnd, ps); Graphics g = new Graphics(ps.hdc); g.DrawImage(m_someBitmap, 0, 0); g.Destroy(); […]

在窗口上绘制位图时不希望的消除锯齿

我正在渲染一个图像到一个System.Drawing.Bitmap,然后将其绘制到一个窗口中,但是我可以看到边缘正被反锯齿。 如何防止这一点? 一些更多的细节。 位图是这样创build的: new Bitmap (this.Width, this.Height, Imaging.PixelFormat.Format32bppArgb) 然后我将像素设置为Color.Black或Color.White。 我已经尝试使用Bitmap.SetPixel并使用Bitmap.LockBits将字节直接写入位图数据。 一旦位图准备就绪,我在Form.OnPaint覆盖中绘制它: pea.Graphics.DrawImage ( !this.bitmap , this.ClientRectangle , new Rectangle (0, 0, this.Width, this.Height) , GraphicsUnit.Pixel ) 每个像素应该是黑色或白色,但我可以看到在边缘的像素是灰色的。

用graphics自定义字体样式

我有以下字体列表: 我没有通过使用它们的问题 new Font("XXXX Sans", 21, FontStyle.Bold, GraphicsUnit.Pixel) 但是,当我需要使用非标准的字体样式时,我该怎么做? 所有提供的是枚举,并不适合。

加载一定分辨率的光标

我有两个游标资源。 第一个[IDC_CURSOR1]包含三种不同的图像types: 32×32,24 bpp 48×48,24 bpp 64×64,24 bpp 第二个[IDC_CURSOR2]只包含一个: 48×48,24 bpp 如果我调用LoadCursor(hInst,IDC_CURSOR1)它总是加载32×32版本,我无法find加载48×48或64×64版本的方式。 在第二种情况下,它会加载48×48图标(因为没有其他版本),但是会将其缩小到32×32。 如何加载32×32以外的光标? 顺便说一句:我试图改变DPI,因为根据msdn它应该自动加载更高的分辨率光标在更高的dpi,但它没有。 谢谢!

任何好的教程/资源来学习Win32的GDI?

到目前为止,我一直在search谷歌,并没有得到一个很好的教程是全面的。 有没有人知道任何教授Win32 GDI的网站或书籍?