HBITMAP LoadImageAsDIB(const wchar_t* filePath)
{
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
Gdiplus::Bitmap* bitmap = Gdiplus::Bitmap::FromFile(filePath);
if (bitmap == NULL)
{
Gdiplus::GdiplusShutdown(gdiplusToken);
return NULL;
}
Gdiplus::BitmapData bitmapData;
Gdiplus::Rect rect(0, 0, bitmap->GetWidth(), bitmap->GetHeight());
bitmap->LockBits(&rect, Gdiplus::ImageLockModeRead, PixelFormat32bppARGB, &bitmapData);
BITMAPINFOHEADER bi;
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = bitmapData.Width;
bi.biHeight = -bitmapData.Height; // Negativo para invertir la imagen verticalmente
bi.biPlanes = 1;
bi.biBitCount = 32;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
HDC hdc = GetDC(NULL);
HBITMAP dib = CreateDIBitmap(hdc, &bi, CBM_INIT, bitmapData.Scan0, (BITMAPINFO*)&bi, DIB_RGB_COLORS);
ReleaseDC(NULL, hdc);
bitmap->UnlockBits(&bitmapData);
delete bitmap;
Gdiplus::GdiplusShutdown(gdiplusToken);
return dib;
}