Для загрузки сохраненного изображения в формате BMP в переменную типа Bitmap (в C++) или hBitmap (в C), можно использовать несколько подходов. Рассмотрим два наиболее распространенных способа:
1. Использование библиотеки GDI+
Библиотека GDI+ (Graphics Device Interface Plus) является частью платформы Windows и предоставляет удобный интерфейс для работы с графикой, включая загрузку и сохранение изображений. Для загрузки сохраненного BMP-изображения с помощью GDI+ в переменную типа Bitmap в C++:
#include <windows.h> #include <gdiplus.h> using namespace Gdiplus; HRESULT LoadBitmapFromFile(const WCHAR* pszFileName, Bitmap** ppBitmap) { *ppBitmap = NULL; ULONG_PTR gdiplusToken; GdiplusStartupInput startupInput; GdiplusStartup(&gdiplusToken, &startupInput, NULL); Bitmap* pBitmap = new Bitmap(pszFileName, false); Status status = pBitmap->GetLastStatus(); if (status == Ok) { *ppBitmap = pBitmap; GdiplusShutdown(gdiplusToken); return S_OK; } delete pBitmap; GdiplusShutdown(gdiplusToken); return HRESULT_FROM_WIN32(static_cast<long>(status)); }
Для использования этой функции в программе, вы можете вызвать ее следующим образом:
int main() { const WCHAR* pszFileName = L"image.bmp"; Bitmap* pBitmap = NULL; HRESULT hr = LoadBitmapFromFile(pszFileName, &pBitmap); if (SUCCEEDED(hr)) { // Изображение успешно загружено в переменную pBitmap // Здесь можно выполнять дополнительные операции над изображением } delete pBitmap; return 0; }
2. Использование библиотеки стандартных функций Windows (API)
Для загрузки сохраненного BMP-изображения в переменную типа hBitmap в С++ или C, вам необходимо использовать набор WinAPI-функций. Приведенный ниже код демонстрирует этот подход в C++:
#include <windows.h> HBITMAP LoadBMP(const char* pszFileName) { HBITMAP hBitmap = (HBITMAP)LoadImageA(NULL, pszFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); return hBitmap; }
Функция LoadImageA
здесь используется для загрузки изображения из файла с заданным именем. Данная функция возвращает дескриптор загруженного изображения типа HBITMAP, который можно использовать дальше в программе для отображения или работы с изображением.
Ниже приведен пример использования этой функции в программе:
int main() { const char* pszFileName = "image.bmp"; HBITMAP hBitmap = LoadBMP(pszFileName); if (hBitmap != NULL) { // Изображение успешно загружено в переменную hBitmap // Здесь можно выполнять дополнительные операции над изображением } DeleteObject(hBitmap); return 0; }
Функция DeleteObject
используется для освобождения памяти, занимаемой загруженным изображением после его использования.
В обоих примерах для загрузки изображений используются функции, подходящие для работы с форматом BMP. Вы можете выбрать подходящий для вашей задачи метод и использовать указанный код в своей программе.