Cómo mostrar imágenes en formato png
Dependencias de bibliotecas de terceros (paquete comprimido, 900k)
Leer con frecuencia Alguien preguntó Una pregunta similar en el foro técnico de bbs. Permítanme presentarles brevemente cómo resolver este pequeño problema. Dado que la API de Win32 solo proporciona soporte básico para mapas de bits en formato bmp, necesitará utilizar una biblioteca de terceros para realizar esta tarea. GDI+ es en realidad una buena opción. No solo admite múltiples formatos de imagen, sino que también realiza operaciones de procesamiento de imágenes. Ha sido optimizado para esto y la definición de la interfaz también es muy clara.
Aquí se presentan soluciones basadas en las bibliotecas JpegLib y libpng.org de Independent Jpeg Group. Tanto el formato jpeg como el png son formatos de imagen comprimidos. La diferencia es que jpeg usa compresión con pérdida y png usa compresión sin pérdida. Para mostrar ambas imágenes en un programa de Windows, la imagen comprimida debe restaurarse en un mapa de bits en la memoria. Relativamente hablando, el formato bmp es más fácil de manejar, tanto que cualquiera puede escribir un módulo para leer imágenes bmp, pero por supuesto no es tan fácil, hay múltiples modos de color y problemas de alineación de 4 píxeles a considerar en las imágenes bmp. . Ambas bibliotecas están escritas en C y libpng depende de zlib, también escrito en C.
Recientemente he estado desarrollando una nueva biblioteca para leer archivos JPEG y PNG.
Recientemente, hemos estado desarrollando un proyecto que requiere imágenes jpeg y png, y aquí hay algunos fragmentos de código para compartir (no hay DEMO, pero la parte de lectura de un solo archivo se ha completado). La versión original de este código no fue escrita por nuestro equipo, pero la encapsulamos y solucionamos algunos errores (como pérdidas de memoria). Iba a hacer una pequeña DEMO para demostrarlo, pero es una tarea enorme (estoy intentando admitir vc6, vc71, vc80, dev-cpp, etc. al mismo tiempo).
El siguiente es el método para cargar imágenes jpeg: Código C++ HBITMAP PictureLoader::LoadJpegPicture( const char* fileName) { FILE * jpegFile; struct jpeg_error_mgr jerr; struct jpeg_decompress_struct cinfo if ((jpegFile = fopen( fileName, "rb")) == NULL) { return HBITMAP(0); cinfo.cinfo.err = jpeg_std_error(&jerr); jpeg_ create_decompress(&cinfo); jpeg_start_decompress( &. cinfo); int rowSize = cinfo.output_width * cinfo.output_components; int width_decompress(&.cinfo); jpeg_start_decompress(&.cinfo) { jpeg_read_scan; líneas ( &cinfo, pBuffer, 1); int start=rowSize*(cinfo.output_scanline-1); for(int i = 0; i < rowSize; i++) { bmpBuffer[start+i]=pBuffer[0][i]; jpeg_finish_sarray( (j_mon_ptr) &cinfo, JPOOL_IMAGE.} jpeg_finish_decompress(&cinfo); jpeg_destroy_ decompress(&cinfo); mapa de bits HBITMAP = CreateBitmapFromBuffer(bmpBuffer, ancho, alto); fclose(jpegFile); eliminar[] bmpBuffer; devolver mapa de bits; }