GDI+加载jpg到HBITMAP
时间: 2023-06-17 12:03:02 浏览: 73
要使用GDI+加载JPG文件并将其转换为HBITMAP对象,您可以使用以下代码:
```c++
#include <windows.h>
#include <gdiplus.h>
#pragma comment (lib, "Gdiplus.lib")
HBITMAP LoadJpgToHBITMAP(const wchar_t* fileName)
{
Gdiplus::Bitmap* bmp = Gdiplus::Bitmap::FromFile(fileName);
if (bmp == NULL)
{
return NULL;
}
HBITMAP hBitmap = NULL;
bmp->GetHBITMAP(Gdiplus::Color::White, &hBitmap);
delete bmp;
return hBitmap;
}
```
使用该函数,您可以将JPG文件加载到HBITMAP对象中,然后在您的应用程序中使用它。请注意,您需要在代码中包含GDI+头文件和库,并且需要在代码中添加`Gdiplus::GdiplusStartup`和`Gdiplus::GdiplusShutdown`函数来初始化和释放GDI+库。
相关问题
c++ gdi+ 将资源文件bmp图像 加载到 Bitmap
在 C++ 中使用 GDI+ 加载位图可以通过以下步骤实现:
1. 在资源文件中添加位图资源,并为其分配一个 ID。
2. 在代码中使用 LoadBitmap 函数加载位图资源。
3. 将加载的位图赋值给 GDI+ 的 Bitmap 对象。
下面是一个示例代码:
```cpp
#include <windows.h>
#include <gdiplus.h>
#pragma comment(lib, "gdiplus.lib")
using namespace Gdiplus;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
// 加载位图资源
HBITMAP hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
// 创建 GDI+ Bitmap 对象
Bitmap* pBitmap = Bitmap::FromHBITMAP(hBitmap, NULL);
// 绘制位图
HDC hdc = GetDC(NULL);
Graphics graphics(hdc);
graphics.DrawImage(pBitmap, 0, 0);
// 释放资源
ReleaseDC(NULL, hdc);
delete pBitmap;
DeleteObject(hBitmap);
GdiplusShutdown(gdiplusToken);
return 0;
}
```
在这个示例中,我们使用 LoadBitmap 函数加载了位图资源,并通过 Bitmap::FromHBITMAP 函数创建了 GDI+ Bitmap 对象。最后,我们使用 Graphics::DrawImage 函数将位图绘制在屏幕上,并在退出程序时释放了相关资源。
c++ gdi+ 根据 资源id 加载 Bitmap 对象
你可以使用以下代码来根据资源ID加载Bitmap对象:
```c++
HINSTANCE hInstance = GetModuleHandle(NULL); // 获取当前程序实例句柄
HRSRC hResource = FindResource(hInstance, MAKEINTRESOURCE(resourceId), RT_BITMAP); // 查找资源
HGLOBAL hMemory = LoadResource(hInstance, hResource); // 加载资源
LPVOID lpAddress = LockResource(hMemory); // 锁定资源
HBITMAP hBitmap = CreateBitmapFromMemory(lpAddress); // 从内存中创建Bitmap对象
```
其中,`resourceId`为资源ID,`CreateBitmapFromMemory`是自定义的函数,实现从内存中创建Bitmap对象的操作。具体实现可以参考以下代码:
```c++
HBITMAP CreateBitmapFromMemory(LPVOID lpAddress)
{
BITMAPINFOHEADER bmih = { 0 };
bmih.biSize = sizeof(bmih);
bmih.biWidth = 100; // 图像宽度
bmih.biHeight = 100; // 图像高度(正数表示从上到下,负数表示从下到上)
bmih.biPlanes = 1;
bmih.biBitCount = 24; // 每像素位数
bmih.biCompression = BI_RGB;
BITMAPINFO bmi = { 0 };
bmi.bmiHeader = bmih;
LPVOID pBits = NULL;
HDC hdc = GetDC(NULL); // 获取屏幕设备上下文句柄
HBITMAP hBitmap = CreateDIBSection(hdc, &bmi, DIB_RGB_COLORS, &pBits, NULL, 0); // 创建DIB位图
ReleaseDC(NULL, hdc); // 释放设备上下文句柄
memcpy(pBits, lpAddress, bmih.biSizeImage); // 将内存中的图像数据复制到位图中
return hBitmap;
}
```
这样,你就可以根据资源ID加载Bitmap对象了。