Articles of gdi +

GDI GradientFill不能在离屏位图上工作

我正在尝试使用GDI GradientFill函数在屏幕上绘制位图,然后在屏幕上绘制BitBlt。 但我总是得到一个黑色的位图…如果我GradientFill直接到它的工作的屏幕。 下面是一个示例应用程序,看看我的意思。 #pragma comment(lib, "msimg32.lib") #include <windows.h> const CHAR c_szWndClass[] = "GradientTestWnd"; const CHAR c_szWndTitle[] = "GradientTest"; const int c_nWndWidth = 1024; const int c_nWndHeight = 768; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { WNDCLASSEX wcx; ZeroMemory(&wcx, sizeof(wcx)); wcx.cbSize = sizeof(wcx); wcx.style = CS_HREDRAW | CS_VREDRAW | […]

StretchDIBits仅在特定图像尺寸下失败

我正在使用StretchDIBits来打印图像,并且由于某种未知的原因,当图像处于特定尺寸时,图像会失败。 将图像数据从24位BGR格式的某些其他图像源加载到无符号整型数组中。 我已经证实,图像和缓冲区是完全正确的,因为,就像我说的,它在一些大小,但根本没有。 目前我正在testing的大小是638×1014。 如果我将高度更改为1013,则工作正常,但是由于某种原因,如果是1014,那么它就会失败。 下面是一些代码,告诉你如何设置: unsigned int * buffer = new unsigned int[width * height * 3]; // Fill buffer with image data… BITMAPINFOHEADER bi = { 0 }; bi.biSize = sizeof(BITMAPINFOHEADER); bi.biWidth = width; bi.biHeight = height; bi.biPlanes = 1; bi.biBitCount = 24; bi.biCompression = BI_RGB; bi.biSizeImage = width * height * 3; […]

用自定义钢笔样式在win32 / GDI中绘制线条?

我需要使用win32 / GDI(Native,不是.NET)做一些绘图,并且遇到以下问题: 我需要画出“风格”的线条。 例如,在附图中,就我的应用数据而言,标记为“A”的线条是一条直线,只需要以附加的曲折作为样式来绘制即可。 当然,这很容易在编程上做,但是当线可以处于任何angular度(“B”)或者甚至是贝塞尔曲线(“C”)时变得更加复杂。 现在,我可以用编程的方式来完成这个任务,辛苦地做math运算,把每条线的可能性都设置成一个曲折的曲线,但这需要花费很多时间,更重要的是比较容易出错。 是否有可能给窗口/ GDI一个“样式”应用于行,也许是一个像“D”标记的位图,并使用它作为一个笔画线? 如果没有,比起为每个“样式”行编写一堆特定的绘图代码,是否还有一个更灵活,更容易出错的方法呢? *显然,第一次定时器不能发布图像。 例子可以在http://img.zgserver.com/windows/IC0T2.pngfind

为什么Bitblt不能工作

> case WM_PAINT: { > hdc = BeginPaint(hWnd, &ps); > // TODO: Add any drawing code here… > RECT rt; > GetClientRect(hWnd, &rt); > HDC myHdc = CreateCompatibleDC(hdc); > > DrawText(myHdc, szHello, strlen(szHello), &rt, DT_CENTER); > BitBlt(hdc,0,0,rt.right-rt.left,rt.bottom-rt.top,myHdc,0,0,SRCCOPY); > > EndPaint(hWnd, &ps); } > > break; 为什么文字不能显示在窗口?

Windows GDI上下文 – LoadImage

使用LoadImage()会导致分段错误。 回溯堆栈我发现最后调用了以下函数: AlpcMaxAllowedMessageLength() 这是我打电话的function: status = (HBITMAP) LoadImage(NULL, MAKEINTRESOURCE(STATUS_BMP), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION)); 与作为一个有效的资源位图文件加载的STATUS_BMP。 有人遇到类似的问题关于这个function,或只是有问题的解决scheme?

从24 bpp到16 bpp格式的图像转换

我有一个图像即绘制使用Windows GDI调用(24 bpp),我需要将此图像转换为16 bpp。 这是在Windows Mobile上。 24 bpp – RGB (rrrrrrrr gggggggg bbbbbbbb) 16 bpp – RGB (rrrrr gggggg bbbbb) 为此我使用下面的代码 for (int x = 0; x < iScreenSize; x++) { *iPixel1= (*iPixel & 0x0000001F) | (*iPixel & 0x00003F00) >> 3 | (*iPixel & 0x001F0000) >> 5; } 代码工作正常,但性能不是很好,因为我是逐像素修改。 你能提出任何可能的改善这个转换? 提前致谢

在C#中同时使用graphics对象的错误?

我正在创build一个游戏,在同一个窗体上有两个对象,每隔几秒需要重新绘制一次(对于animation)。 我有一个单独的线程。 他们偶尔会产生一个错误,说graphics对象已经被使用了。 该错误出现次数较less,因为我在同一个表单上构build了2个graphics对象: Graphics sprite1 = this.CreateGraphics(); Graphics sprite2 = this.CreateGraphics(); 然后我将这些对象传递给适当的方法。 我很害怕这可能是一个非常糟糕的做法。 任何帮助解决这个问题,将不胜感激。

是否有可能复制一个GDI句柄?

或在我的具体情况下,一个窗口区域(HRGN)? 更新:问题如下: 我有一个对象的集合,每个这些对象可以容纳一个HRGN。 曾经获得的这个地区在对象被破坏时被释放。 由于这些对象中的一些被存储在一个std :: vector中,所以我必须定义一个assignement操作符。 到目前为止,我刚刚分配了这些HRGN,但这是一个错误。 如果我复制这样的对象,那么每个对象都会尝试删除同一个区域,其中一个会使用一个不存在的区域。

GDIPlus Windows用户界面的未来:哪个将被replace?

几乎所有具有GUI的Windows应用程序(WinForms或Native)都使用GDIPlus。 但这项技术相当陈旧,显示出很多局限性。 替代品是WPF,还是Silverlight,Flash? 但像Visual Studio和Delphi这样的开发工具仍然使用GDIPlus作为参考。 什么时候会改变? 而且:还有可移植性吗? 就像delphiVCL将来会被移植到一个保持向后兼容性的新技术? (对于前TButton是GDI,将来它可以是其他东西)。 更新 :也许我的问题可以被描述为:“未来的操作系统将呈现没有GDI +的GUI小部件,但使用更新的技术,一种内置的SIlverlight / Flash?

防止GDI + PNG编码器将Gamma信息添加到1位PNG

我想知道是否可以指示Imaging PNG编码器不要将任何伽玛和色度信息添加到1位PNG。 我正在为图像创build一个2色调色板 ColorPalette* pal = (ColorPalette*)CoTaskMemAlloc(sizeof(ColorPalette) + 2 * sizeof(ARGB)); pal->Count = 2; pal->Flags = 0; pal->Entries[0] = MAKEARGB(0,0,0,0); pal->Entries[1] = MAKEARGB(0,255,255,255); if (FAILED(res = sink->SetPalette(pal))) { return res; } CoTaskMemFree(pal); 然后就是了 BitmapData bmData; bmData.Height = bm.bmHeight; bmData.Width = bm.bmWidth; bmData.Scan0 = bm.bmBits; bmData.PixelFormat = PixelFormat1bppIndexed; UINT bitsPerLine = imageInfo.Width * bm.bmBitsPixel; UINT bitAlignment […]