Bitmap, hBitmap как загрузить сохраненный bmp?

Для загрузки сохраненного изображения в формате 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. Вы можете выбрать подходящий для вашей задачи метод и использовать указанный код в своей программе.