Red de conocimiento informático - Material del sitio web - Cómo utilizar libjpeg

Cómo utilizar libjpeg

Este artículo solo presenta el contenido relevante de la compresión jpeg. Para evitar problemas, utilicé la función GDI proporcionada por Microsoft. Es muy conveniente primero codificar la imagen como jpg y luego crear un objeto de mapa de bits basado en los datos del mapa de bits. en la imagen y luego guarde la imagen solo en formato jpg. Sin embargo, todavía confío en GDI y siempre me siento incómodo (sin ningún motivo). Una vez que nuestro sistema está instalado, se ejecutará durante mucho tiempo. Me preocupa que GDI tenga problemas después de ejecutarse durante mucho tiempo. Confirmé mis preocupaciones, en realidad usamos un conjunto de 10 sistemas, y si funcionaban continuamente durante 3 a 5 días, GDI fallaría, así que decidí usar la biblioteca IJG JPEG. Puede descargar el código fuente de libjpeg desde el sitio web

. La biblioteca IJG JPEG es una biblioteca de compresión jpeg que se proporciona a los desarrolladores de software en forma de código fuente. Por supuesto, también hay archivos de biblioteca compilados en el paquete de software. Solo usamos libjpeg.lib, jconfig.h, jconfig.h. , jmorecfg.h, jpeglib.h, a continuación presentaré cómo incrustar la funcionalidad de compresión de imágenes en su propio programa.

1. Establecimiento del entorno de compilación

El llamado establecimiento del entorno de compilación es en realidad muy simple. Simplemente copie los cuatro archivos mencionados anteriormente a la carpeta de su proyecto y agregue libjpeg. lib a su proyecto, luego agregue #include "jpeglib.libjpeg.lib está desarrollado en lenguaje c, si desea usarlo en su programa C, debe usar extern en el archivo donde completa la función de compresión "C", como se muestra a continuación:

// TestLibjpeg.cpp:

//

#include "stdafx.h"

#include " Memory.h"

extern "C" {

#include "jpeglib.h"

}

Dos pasos de compresión

1. Solicite e inicialice el objeto de compresión jpeg y especifique el controlador de errores

struct jpeg_compress_struct jcs;

// Declare el controlador de errores y asígnelo a jcs.

err domain

struct jpeg_error_mgr jem;

jcs.err = jpeg_std_error(amp; jem);

jpeg_create_compress(amp; jcs);

2. Especifique el archivo de destino para almacenar la imagen comprimida. Tenga en cuenta que el archivo de destino debe abrirse en modo binario

f=fopen("03.jpg", "wb");

if (f==NULL)

{

eliminar [] datos;

eliminar [] pDataConv; devolver 0;

p>

}

jpeg_stdio_dest(amp.jcs, f

3.jcs,

);

3. Establezca los parámetros de compresión, principalmente Los parámetros incluyen ancho y alto de la imagen, número de canales de color (1: imagen de índice, 3: otro), espacio de color (JCS_GRAYSCALE para imágenes en escala de grises, JCS_RGB para imágenes en color), calidad de compresión, etc., como se muestra a continuación:

jcs.image_width = nWidth; // son el ancho y alto de la imagen, en píxeles

jcs.image_height = nHeight;

jcs.input_components = 1; // 1 representa una imagen en escala de grises, 3 representa un mapa de bits en color

jcs.input_components = 1; // 1 representa una imagen en escala de grises, 3 representa un mapa de bits en color

jcs.image_width = nWidth; // es el ancho y alto de la imagen, en píxeles in_color_space = JCS _GRAYSCALE; // JCS_GRAYSCALE representa imágenes en escala de grises, JCS_RGB representa imágenes en color

jpeg_set_defaults(amp ;jcs);

jpeg_set_quality (amp; jcs, 80, true);

Cabe señalar que la función jpeg_set_defaults debe esperar hasta que se cumplan los cuatro parámetros de ancho, alto, El número de canales de color y el espacio de color se configuran antes de que se pueda llamar, porque esta función usa estos cuatro valores. Al llamar a la función jpeg_set_defaults, la biblioteca jpeglib usa la configuración predeterminada para la compresión de imágenes, como por ejemplo. calidad de compresión, después de llamar a esta función, puede llamar a otras funciones de configuración, como la función jpeg_set_quality. De hecho, hay muchos parámetros que se pueden configurar al comprimir imágenes, pero la mayoría de nosotros no necesitamos configurarlos. Solo necesitamos llamar a la función jpeg_set_defaults para ajustar los valores a los valores predeterminados.

4. Una vez completados los preparativos anteriores, se puede realizar la compresión. El proceso de compresión es muy simple. Primero llame a jpeg_start_compress y luego puede comprimir cada línea, o incluso varias líneas. comprimir Se comprime toda la imagen Una vez completada la compresión, recuerde llamar a la función jpeg_finish_compress, como se muestra a continuación:

4. se puede comprimir.

función de compresión, como se muestra a continuación:

jpeg_start_compress(amp; jcs, TRUE);

JSAMPROW row_pointer[1] // Una fila de mapa de bits

int row_stride; // Número de bytes por fila

row_stride = jcs.image_width // Si no hay índice, multiplica por 3

// Comprime cada fila

while (jcs.next_scanline lt; jcs.image_height) {

row_stride = jcs.next_scanline lt; jcs.image_height) {

jpeg_create_decompress(amp; cinfo

2. Abra el archivo de imagen jpg y especifíquelo como el archivo fuente del objeto de descompresión

FILE *f = fopen(strSourceFileName, "rb");

if ( f==NULL )

{

printf("¡Error al abrir archivo!\n");

Regresar;

}

/

jpeg_stdio_src(amp;cinfo, f);

3. Leer información de la imagen

jpeg_read_header(amp;cinfo, TRUE);

p>

4. Solicite el búfer de imagen de acuerdo con la información de la imagen

data = new BYTE cinfo.image_width*cinfo.image_height*cinfo.num_ componentes];

5. Comience a resolver la compresión

jpeg_start_decompress(amp; cinfo);

JSAMPROW row_pointer[1];

while (cinfo.output_ scanline lt; cinfo.output_height)

{

row_pointer[0] = amp;data[(cinfo.output_height - cinfo.output_scanline-1)*cinfo.image_ width*cinfo.num_ componentes] ;

6.num_components];

jpeg_read_scanlines(amp; cinfo, row_pointer,

1

}

;

jpeg_finish_decompress(amp; cinfo);

6, liberar recursos

jpeg_destroy_decompress(amp;cinfo);

fclose(f);

Bien, esto concluye la introducción al método de comprimir imágenes usando la biblioteca IJG JPEG. Espero que le resulte útil.

Todas las funciones de compresión y descompresión de imágenes se han implementado en el código de muestra. El formato del comando es el siguiente: "TestLibjpeg.exe j|j24|b nombre del archivo fuente nombre del archivo destino", donde la opción j comprime el archivo fuente en formato jpg. sin cambiar el modo, la opción j24 comprime el archivo fuente en formato jpg de 24 bits y la opción b descomprime el archivo fuente en formato bmp. Si desea introducir su propio código, el ejemplo no proporciona verificación de validez. , implemente usted mismo la verificación de validez del archivo.