Articles of gdi +

捕获的图像为一个opengl窗口在win7下是黑色的

我在主窗口上有几个子窗口,有些是GDI窗口,有些是opengl渲染窗口,一个是用矩形捕捉图像(可能覆盖不同的窗口组合)。 这个function在Windows XP下工作正常。 但是,在Windows 7下,所有opengl呈现的窗口都是黑色的。 我做了一些研究,有人说gdi不能通过窗口DC直接访问帧缓冲区,必须使用glReadPixels来合并位图。 然而,这种方法很尴尬,因为我必须分别合并每个窗口。 任何人都有更好的select吗? 这是我的代码捕捉BMP: void MainWndClass::catchBmp(const char* path_fn, bool drawAreaOnly /*=0*/) { CDC *pDC=GetDC(); int BitPerPixel = pDC->GetDeviceCaps(BITSPIXEL); int Left,Top,Width,Height; if (drawAreaOnly) { Left = rBDWin.left; Top = rBDWin.top; Width = rBDWin.right-rBDWin.left; Width = Width/4*4; Height = rBDWin.bottom-rBDWin.top; Height = Height/4*4; } else { Left=rbmpWin.left; Top=rbmpWin.top; Width=rbmpWin.right-rbmpWin.left; Width=Width/4*4; Height=rbmpWin.bottom-rbmpWin.top; Height=Height/4*4; […]

为什么GetLogPen使用自定义笔失败?

对GetLogPen()和GetExtLogPen()的调用都失败。 他们返回零… CBrush Brush; Brush.CreateSolidBrush( COLOR_MINORSELECTION ); Brush.GetLogBrush( &lBrush ); DWORD Style[] = { 3, 1 }; CPen CustomPen; CustomPen.CreatePen( PS_USERSTYLE, 1, &lBrush, 2, Style ); CPen *pOldPen = pDC->SelectObject( &CustomPen ); LOGPEN LogPen; if( CustomPen->GetLogPen( &LogPen ) == 0 ) { EXTLOGPEN ExtLogPen; if( CustomPen->GetExtLogPen( &ExtLogPen ) == 0 ) return; } 失败似乎是因为PS_USERSTYLE被用于笔风格。 如果我用PS_SOLID笔进行此操作, […]

Windows:获取其他字体替代字符的字形轮廓

我需要将字体渲染成3D游戏世界,所以我使用GetGlyphOutline轮廓函数来将字形形状渲染为纹理。 但是,我希望能够处理给定字体中不存在字符的情况(亚洲其他国际文本常常是这种情况)。 Windows文本渲染将自动replace具有所需字符的字体。 但GetGlyphOutline不会。 我怎样才能检测到这种情况,并得到替代字形的轮廓? Mac OS X的核心文本有一个函数,以获得一个给定的字体和string的匹配replace字体 – 有什么类似的Windows?

绘制自定义Windows控件的问题

我在使用Windows中的uxTheme库来绘制我自己的自定义控件,并且我无法弄清楚为什么我的控件看起来不像常规的Windows控件(应该是)使用相同的主题: 上图显示了一个标准的Windowscombobox(顶部)和我使用ComboBox主题(底部)绘制的自定义控件。 我无法解决的是为什么我的控制边界与标准控制有不同的形状和颜色。 在我的类构造函数中,我打开主题数据: mComboTheme = OpenThemeData( hwnd, L"COMBOBOX" ); 然后在WM_PAINT的处理程序中,我只画了ComboBox组件的两个部分: case WM_PAINT: { PAINTSTRUCT ps; HDC hdc; RECT client; if( GetUpdateRect( hwnd, &ps.rcPaint, false )) { hdc = BeginPaint( hwnd, &ps ); GetClientRect( hwnd, &client ); if( IsThemeBackgroundPartiallyTransparent( mComboTheme, CP_BACKGROUND, CBXS_HOT )) { DrawThemeParentBackground( hwnd, hdc, &ps.rcPaint ); } DrawThemeBackground( mComboTheme, hdc, CP_BACKGROUND, CBXS_HOT, […]

跨进程共享位图

如何在Windows中使用win32 / mfc在机器上运行的所有进程之间共享设备独立位图? 寻找在Windows XP / 7机器上的所有进程之间共享DIB的最佳和最快的方式。 进程应该能够locking位图的内容并在该位图上绘制,其他进程也可以使用该位图进行读取。 例如,最初这个DIB将由主应用程序创build。 当其他进程想要在此进程上绘制某些东西时,可以locking此DIB的内容并在此位图上绘制。 如果其他进程想要读取该位图的内容,则可以locking位图并读取位图。 请在时间复杂性和空间复杂性方面提出一个最好的方法。 空间复杂度意味着,想要在该位图上绘制内容的过程不需要复制本地内存上的所有内容并绘制,应该直接在设备上下文中将此位图绘制到位图中。

Gdiplus ::来自字节数组的图像

我正在执行dcraw并使用一个匿名pipe道将其pipe道到一个字符数组。 我的问题是如何从包含jpeg图像的字符数组中创build一个Gdiplus::Image对象? 没有从磁盘写入和读取它。

我怎样才能让WNDCLASS有一个位图图像作为背景?

我把WNDCLASS和hbrBackground属性填充到我的位图中 wc.hbrBackground = CreatePatternBrush( LoadBitmap( hInstance, MAKEINTRESOURCE( "grey-texture.bmp" ) ) ); 这似乎并没有改变,窗口是白色的,因为它是默认的,所以我需要找出这里发生了什么。 是CreatePatternBrush不正确的function用于这样的事情? 难道不能这样做吗? hbrBackground = fromimagefile(string bitmap,bool tile);

如何克隆图标

在Windows中,给定一个图标( HICON )的句柄,你如何克隆它? 例如 HICON CloneIcon(HICON OriginalIcon) { ICON clone; //… return clone; }

DrawPath和DrawRectangle的区别

我在我的应用程序中使用矩形和graphicspath绘制线条,而当使用GraphicsPath而不是使用矩形时,我正面临graphics宽度和高度的丢失。 以下是重现我的问题的示例代码, protected override void OnPaint(PaintEventArgs e) { int left = ClientRectangle.X + 40, right = ClientRectangle.Width -80; int bottom = ClientRectangle.Height – 80, top = ClientRectangle.Y + 40; int borderWidth = 10; Rectangle borderrectangle = new Rectangle(left, top, right, bottom); Pen pen = new Pen(Color.Black, borderWidth); //Draws lines using Rectangle. e.Graphics.DrawRectangle(pen, borderrectangle); Point[] points […]

Windows位图:BITMAPV5HEADER和BITMAPINFO兼容?

从CreateDIBSection文档中,我发现CreateDIBSection将指针指向BITMAPINFO作为第二个参数。 但是,我遇到了各种各样的地方,表明它可能被允许传递指向其他结构(特别是BITMAPV5HEADER )的指针,包括 这个答案是另一个问题 铬的源代码 我有一个感觉,这是非常有意义的( BITMAPV5HEADER可以被看作是BITMAPINFO结构布局的扩展版本),但是我找不到关于这个主题的官方文档。 任何人都可以确认传递BITMAPV5HEADER*而不是BITMAPINFO实际上是有效的,并可能提供一些文档?