Win32 C/C++从内存缓冲区加载图像

我想在Win32应用程序上加载图像(.bmp)文件,但我不想使用 Windows API中的标准LoadBitmap / LoadImage:我希望它从已经在内存中的缓冲区加载.我可以直接从文件中轻松加载位图并将其打印在屏幕上,但这个问题让我陷入困境.

我正在寻找的功能是这样的:

HBITMAP LoadBitmapFromBuffer(char* buffer,int width,int height);
没关系,我找到了解决办法!这是初始化代码
std::ifstream is;
is.open("Image.bmp",std::ios::binary);
is.seekg (0,std::ios::end);
length = is.tellg();
is.seekg (0,std::ios::beg);
pBuffer = new char [length];
is.read (pBuffer,length);
is.close();

tagBITMAPFILEHEADER bfh = *(tagBITMAPFILEHEADER*)pBuffer;
tagBITMAPINFOHEADER bih = *(tagBITMAPINFOHEADER*)(pBuffer+sizeof(tagBITMAPFILEHEADER));
RGBQUAD             rgb = *(RGBQUAD*)(pBuffer+sizeof(tagBITMAPFILEHEADER)+sizeof(tagBITMAPINFOHEADER));

BITMAPINFO bi;
bi.bmiColors[0] = rgb;
bi.bmiHeader = bih;

char* pPixels = (pBuffer+bfh.bfOffBits);

char* ppvBits;

hBitmap = CreateDIBSection(NULL,&bi,DIB_RGB_COLORS,(void**) &ppvBits,NULL,0);
SetDIBits(NULL,hBitmap,bih.biHeight,pPixels,DIB_RGB_COLORS);

GetObject(hBitmap,sizeof(BITMAP),&cBitmap);

相关文章

(1)when you ping a computer from itsafe,the ping command should return the local IP address. (...
1、点击win菜单,点击设置图标 2、选择系统选项 3、选择应用与程序选项 4、拉到最下方,选择程序与功能...
目前一直直接往Windows 2008 R2 Server中复制文件(暂时还没有搭建ftp服务),突然不能复制了,于是百度...
windows下使用vscode配合xebug调试php脚本 要下载有php_xebug.dll扩展的版本,最新版可能没有这个扩展,p...
在控制面板的程序与功能里启用和关闭windows功能打开,适用于linux的windows子系统
效果演示 推荐一个非常牛的文档网站生成器:docsify 我通过这个工具,成功将码云上的个人学习笔记发布到...