Как загрузить и вывести картинку используя WinApi?

Объясните, как загрузить и вывести битмап?

Также насколько я понял не все bmp картинки подходят, какие есть для них требования?


Ответы (1 шт):

Автор решения: t3f

Вариант 1 - GDI

// загрузка bitmap-а из файла:
HBITMAP hBmp = (HBITMAP)LoadImage(NULL, L"C:\\файл.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
// создание memory DC для этого bitmap-а:                   
HDC bmpDC = CreateCompatibleDC(wndDC);
SelectObject(bmpDC, hBmp);
// вывод (wndDC - HDC окна):
BitBlt(wndDC, 0, 0, width, height, bmpDC, 0, 0, SRCCOPY);
// освобождение ресурсов:           
DeleteDC(bmpDC);
DeleteObject(hBmp);

Вариант 2 - GDI+

Заголовочный файл и пространство имён:

#include <gdiplus.h>
using namespace Gdiplus;

Ещё нужно прилинковать библиотеку импорта gdiplus.lib. В Visual Studio для этого можно использовать директиву:

#pragma comment(lib, "gdiplus.lib")

GDI+ требует предварительной инициализации, при запуске приложения нужно выполнить:

ULONG_PTR gdiToken;
GdiplusStartupInput gdiInput;
GdiplusStartup(&gdiToken, &gdiInput, NULL);

А при завершении приложения:

GdiplusShutdown(gdiToken);

Загрузка и вывод bitmap-а:

Graphics graphics(wndDC); //wndDC - HDC окна
Bitmap bmp(L"C:\\файл.bmp");
graphics.DrawImage(&bmp, 0, 0, width, height);

Вариант 3 - Direct2D

Рекомендуемый Microsoft (GDI и GDI+ объявлены устаревшими), но самый неудобный вариант - требуется писать слишком много кода, для такой простой задачи (поэтому писать его здесь я не буду). На MSDN есть примеры:

Creating a Simple Direct2D Application

How to Load a Bitmap from a File

How to Draw a Bitmap

→ Ссылка