Для отображения PNG изображения в приложении на C++ с использованием WinAPI необходимо загрузить библиотеку для работы с PNG форматом, например, библиотеку libpng. Затем можно использовать следующий код для загрузки и отображения PNG изображения:
1. Загрузка изображения в память:
```cpp
#include <iostream>
#include <fstream>
#include <vector>
std::vector<unsigned char> LoadPNG(const char* filename, int& width, int& height) {
std::ifstream file(filename, std::ios::binary);
if (!file.is_open()) {
std::cerr << "Error opening file: " << filename << std::endl;
return std::vector<unsigned char>();
}
std::vector<unsigned char> image;
file.seekg(8);
unsigned char byte;
while (file.read(reinterpret_cast<char*>(&byte), 1)) {
image.push_back(byte);
}
file.close();
return image;
}
```
2. Отображение изображения на окне с помощью WinAPI:
```cpp
#include <Windows.h>
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch (msg) {
case WM_PAINT: {
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
// загрузка картинки
int width, height;
std::vector<unsigned char> image = LoadPNG("image.png", width, height);
// отображение картинки
int scanline = width * 4;
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int index = (y * scanline) + (x * 4);
COLORREF color = RGB(image[index], image[index + 1], image[index + 2]);
SetPixel(hdc, x, y, color);
}
}
EndPaint(hwnd, &ps);
return 0;
}
case WM_CLOSE: {
DestroyWindow(hwnd);
return 0;
}
case WM_DESTROY: {
PostQuitMessage(0);
return 0;
}
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
// создание окна
WNDCLASS wc = {};
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = L"WinAPI PNG Image";
RegisterClass(&wc);
HWND hwnd = CreateWindowEx(0, wc.lpszClassName, L"PNG Image", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, nCmdShow);
MSG msg = {};
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
```
Этот код открывает окно с изображением в формате PNG и использует функцию `LoadPNG` для загрузки изображения из файла. Далее, в функции отображения окна `WindowProc` происходит отображение изображения пиксель за пикселем на окне с помощью функции `SetPixel`.
Не забудьте добавить в проект библиотеку libpng и скомпилировать программу с соответствующими настройками компилятора.