c++ image winapi png gdi

c++ - ¿Cómo cargaría una imagen PNG usando Win32/GDI(si no es posible GDI+)?



winapi (4)

¿Es posible cargar un PNG desde un archivo en un HBITMAP usando las funciones de Win32 GDI? Si no, ¿cuál sería la solución más liviana sin usar bibliotecas externas (como libpng)?


No creas que GDI soporta png, ¿has visto libpng


No es necesario utilizar la biblioteca de Windows Imaging Component, GDI + o PNG. Puede utilizar la funcionalidad de icono.

  1. Agregue un nuevo icono (ICO_PNG) a los recursos del proyecto de VC con Ancho y Altura personalizados (Editor de recursos-> Imagen-> Nuevo tipo de imagen). Copia tu imagen png aquí y usa la herramienta de relleno + color transparente para hacer que el icono sea transparente.

  2. Agregue Picture Control (IDC_PNG) a su cuadro de diálogo (Type = Owner draw).

  3. Código de procedimiento de diálogo:

switch (msg) { ... case WM_DRAWITEM: { LPDRAWITEMSTRUCT pDIS = (LPDRAWITEMSTRUCT)lParam; if (pDIS->CtlID == IDC_PNG) { HICON hIcon = (HICON)LoadImage(GetModuleHandle(0), MAKEINTRESOURCE(ICO_LOGO), IMAGE_ICON, 0, 0, LR_LOADTRANSPARENT); DrawIconEx(pDIS->hDC, 0, 0, hIcon, 0, 0, 0, NULL, DI_NORMAL); DestroyIcon(hIcon); return TRUE; } } }


Puede hacerlo con la API de StretchDIBits , pero limitada por la disponibilidad del sistema operativo / controlador.

Consulte la documentación de MSDN para más detalles:

http://msdn.microsoft.com/en-us/library/dd145121(v=VS.85).aspx

http://msdn.microsoft.com/en-us/library/dd145107(VS.85).aspx

Sinceramente, me disculpo por engañarles a ustedes interesados ​​en este tema. Déjame corregir mi error. No hay StretchDIBits para dibujo PNG. Será mejor que intente el método WIC o considere la forma de integrar GDI + en sus proyectos.