Win32 C/C++从内存缓冲区加载图像
发布时间:2020-12-14 04:18:17 所属栏目:Windows 来源:网络整理
导读:我想在Win32应用程序上加载图像(.bmp)文件,但我不想使用 Windows API中的标准LoadBitmap / LoadImage:我希望它从已经在内存中的缓冲区加载.我可以直接从文件中轻松加载位图并将其打印在屏幕上,但这个问题让我陷入困境. 我正在寻找的功能是这样的: HBITMAP
我想在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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows-server-2003 – 可以从“开始”菜单中删除“关机”
- win-universal-app – Windows 10的应用内存限制是什么?
- windows – 如何在运行命令时阻止批处理文件(.bat)关闭终端
- 如何在一秒钟内在ESXi Windows虚拟机上同步时间?
- windows-7 – 为MPEG2传输流构建图形的最佳方法
- Windows – 使用VMWare归档旧计算机会导致激活问题
- 解决win10 蓝牙设备只能配对无法连接 ,并且删除设备无效的
- microsoft-teams – 如何调试Microsoft Teams选项卡中执行的
- windows-vista – 当内存不足时,Vista如何决定应关闭哪些程
- windows – 删除图像元数据中的“程序名称”