草庐IT

c++ - 如何使用 GDI+ 和 C++ 从 SQL Server 数据库加载和保存图像?

我需要特别加载保存为blob的JPG图像。GDI+使得从文件而不是数据库中检索图像变得非常容易... 最佳答案 看看Image::Image(IStream*,BOOL).这需要一个指向实现IStream接口(interface)的COM对象的指针。您可以通过使用GlobalAlloc分配一些全局内存来获得其中之一。然后调用CreateStreamOnHGlobal在返回的句柄上。它看起来像这样:shared_ptrCreateImage(BYTE*blob,size_tblobSize){HGLOBALhMem=::GlobalA

c++ - GDI+ 双缓冲

我已经成功地使用GDI实现了双缓冲,但没有使用GDI+。我想在不闪烁的情况下显示png图像。此外,在某些时候我还想使用GDI+实现png图像的动画,因此必须知道如何使用GDI+进行双缓冲。我已经设法通过ISTREAM将png图像放入Image对象中:这是我的代码的一部分,可以帮助您了解我遇到问题的地方:memmove(pBlock,pImage,size);CreateStreamOnHGlobal(hBlock,FALSE,&pStream);Graphicsgraphics(memDC);Imageimage(pStream);intimage_width;intimage_hei

c++ - 如何将 GDI 8-bpp 索引位图转换为 RGB 位图?

我正在尝试将8-bpp索引位图转换为RGB位图,但我没有成功。第一个问题是GetPalette()返回的调色板不包含256个唯一数字。到目前为止,这是我的代码:BitmapDatabitmapData;intpaletteSize=b->GetPaletteSize();ColorPalettecolorPalette;b->GetPalette(&colorPalette,paletteSize/4);b->LockBits(newGdiplus::Rect(0,0,b->GetWidth(),b->GetHeight()),0,b->GetPixelFormat(),&bitmap

c++ - 屏幕捕获无法使用 C++ 和 GDI 捕获整个屏幕

我通过网络进行了一些研究,找到了一些有用的代码。我稍微改变了它,试图捕获整个屏幕并生成一个缓冲区,我可以通过udp数据包发送它:#include#include#includevoidCapruteScreenAndSaveToFile(){uint16_tBitsPerPixel=24;uint32_tWidth=GetSystemMetrics(SM_CXSCREEN);uint32_tHeight=GetSystemMetrics(SM_CYSCREEN);//CreateHeaderBITMAPFILEHEADERHeader;memset(&Header,0,sizeof(H

c++ - 从内存中获取 jpeg 的大小(使用 GDI++ 转换)

这是我在这里的第一篇文章。我有个问题。我需要拍摄桌面截图,将其转换为jpeg,将其存储在缓冲区中,然后对其进行处理并通过Internet发送。我已经编写了使用GetDC执行此操作的代码……以及用于将HBITMAP转换为jpeg的GDI+。我现在遇到的问题是我不知道保存到IStream中的jpeg的大小。这是将HBITMAPhBackBitmap引用的位图转换为jpeg并将其保存到pStream的部分代码。我需要知道有多少字节已写入pStream以及如何使用pStream(获取PVOID句柄):Gdiplus::Bitmapbitmap(hBackBitmap,NULL);///load

c++ - 如何将 GDI+ 的图像* 转换为位图*

我正在用c++、gdi+编写代码。我使用Image的GetThumbnail()方法来获取缩略图。但是,我需要将其转换为HBITMAP。我知道下面的代码可以得到GetHBITMAP:Bitmap*img;HBITMAPtemp;Colorcolor;img->GetHBITMAP(color,&temp);//ifimgisBitmap*thisworkswell。但是如何快速将Image*转换为Bitmap*呢?非常感谢!实际上,现在我必须使用以下方法:intwidth=sourceImg->GetWidth();//sourceImgisImage*intheight=source

c++ - 如何使用 GDI 避免屏幕过度闪烁

我对使用GDI渲染图形有点陌生...我制作了一个绘画程序,它运行良好,只是它会导致很多烦人的屏幕闪烁。我承认我的绘画代码并没有真正优化(缺乏时间),但它也不应该非常低效,所以我很困惑。我基本上做的是在init上创建一个兼容的DC,然后创建一个兼容的位图。然后我选择它进入兼容的DC,并绘制到兼容的DC。然后我使用BitBlit()将它复制到窗口hDC...谁能告诉我屏幕撕裂的可能原因?编辑:顺便说一句,屏幕闪烁只发生在绘制路径期间(在路径被绘制到hMemDC之前,它被绘制到窗口的hDC)代码示例:(编辑:如果您需要查看更多您认为相关的代码,请发表评论,我会进行编辑)路径::绘制到(HDC

c++ - 从内存加载图像,GDI+

这是一个快速简单的问题:使用C++中的GDI+,我如何从内存中的像素数据加载图像? 最佳答案 使用SHCreateMemStream,它接受一个指向数据的指针和数据的大小。IStream*pStream=SHCreateMemStream((BYTE*)InputBuffer,Size);//DowhatyouwantpStream->Release(); 关于c++-从内存加载图像,GDI+,我们在StackOverflow上找到一个类似的问题: https

c++ - 为什么 windows GDI 对 `COLORREF` 使用 RGBA 格式而不是 BGRA?

MSDNstates:WhenspecifyinganexplicitRGBcolor,theCOLORREFvaluehasthefollowinghexadecimalform:0x00bbggrrThelow-orderbytecontainsavaluefortherelativeintensityofred;thesecondbytecontainsavalueforgreen;andthethirdbytecontainsavalueforblue.Thehigh-orderbytemustbezero.Themaximumvalueforasinglebyteis0xFF

c++ - 如何使用 Cairo 将 C++ 绘制到使用 GDI 的窗口(而不是创建图像)?

我设法找到了这个代码片段并用Cairo编译了它:#defineLIBCAIRO_EXPORTS#include#includeintmain(intargc,char**argv){cairo_surface_t*surface;cairo_t*cr;surface=cairo_image_surface_create(CAIRO_FORMAT_ARGB32,240,80);cr=cairo_create(surface);cairo_select_font_face(cr,"serif",CAIRO_FONT_SLANT_NORMAL,CAIRO_FONT_WEIGHT_BOLD);