Данный класс позволять производить компрессию и декомпрессию изображений в формате Jpeg, используя библиотеку Intel Jpeg Library. Эта библиотека позволяет оперировать изображением с помощью всего одной DLL. Для работы с этой библиотекой достаточно добавить в Ваш проект файлы из бибилиотеки IJL.H, IJL.LIB, IJL.DLL. В библиотеку включены несколько примеров, которые помогут Вам разобраться с Интеловким классом. Листинг (пример использования библиотеки для работы с Jpeg изображениями) | // *** The JPEG.H wrapper layer header file.
#ifndef JPEG_H
#define JPEG_H
//############################################################################ //## ## //## JPEG.H ## //## ## //## Wrapper class to compress or decompress a jpeg from a block of memory ## //## using the Intel Jpeg Library. ## //## OpenSourced 2/4/2000 by John W. Ratcliff ## //## ## //## No warranty expressed or implied. Released as part of the triangle ## //## throughput testbed project. ## //############################################################################ //## ## //## Contact John W. Ratcliff at
Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script
## //############################################################################
class Jpeg { public:
static void *ReadImage(int &width, // ширина загружаемой картинки. int &height, // высота загружаемой картинки. int &bpp, // БАЙТ (не бит) НА ПИКСЕЛЬ. const void *buffer, // адрес памяти, в котором хранятся // сжатые jpeg-ом данные. int sizebytes); // размер сжатых jpeg-ом данных.
static void * Compress(const void *buffer, // адрес картинки в памяти int width, // ширина картинки в пикселах int height, // высота картинки в пикселах. int bpp, // *БАЙТ* на пиксель изображения 1 или 3 int &len, // возвращённая длина сжатых данных int quality=75); // качество картинки в процентах
};
#endif
// ** JPEG.CPP, the code used to wrap IJL
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h>
//############################################################################ //## ## //## JPEG.CPP ## //## ## //## Wrapper class to load a jpeg from a block of memory. ## //## ## //## OpenSourced 2/4/2000 by John W. Ratcliff ## //## ## //## No warranty expressed or implied. Released as part of the triangle ## //## throughput testbed project. ## //############################################################################ //## ## //## Contact John W. Ratcliff at
Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script
## //############################################################################ #include "jpeg.h" #include "ijl.h" // заголовочный файл Интелевской библиотеки jpeg.
// читаем картинку в этот буфер. void * Jpeg::ReadImage(int &width, int &height, int &nchannels, const void *buffer, int sizebytes) { JPEG_CORE_PROPERTIES jcprops;
if ( ijlInit(&jcprops) != IJL_OK ) { ijlFree(&jcprops); return 0; }
jcprops.JPGBytes = (unsigned char *) buffer; jcprops.JPGSizeBytes = sizebytes; jcprops.jquality = 100;
if ( ijlRead(&jcprops,IJL_JBUFF_READPARAMS) != IJL_OK ) { ijlFree(&jcprops); return 0; }
width = jcprops.JPGWidth; height = jcprops.JPGHeight; IJLIOTYPE mode;
mode = IJL_JBUFF_READWHOLEIMAGE; nchannels = jcprops.JPGChannels; unsigned char * pixbuff = new unsigned char[width*height*nchannels]; if ( !pixbuff ) { ijlFree(&jcprops); return 0; }
jcprops.DIBWidth = width; jcprops.DIBHeight = height; jcprops.DIBChannels = nchannels; jcprops.DIBPadBytes = 0; jcprops.DIBBytes = (unsigned char *)pixbuff;
if ( jcprops.JPGChannels == 3 ) { jcprops.DIBColor = IJL_RGB; jcprops.JPGColor = IJL_YCBCR; jcprops.JPGSubsampling = IJL_411; jcprops.DIBSubsampling = (IJL_DIBSUBSAMPLING) 0; } else { jcprops.DIBColor = IJL_G; jcprops.JPGColor = IJL_G; jcprops.JPGSubsampling = (IJL_JPGSUBSAMPLING) 0; jcprops.DIBSubsampling = (IJL_DIBSUBSAMPLING) 0; }
if ( ijlRead(&jcprops, mode) != IJL_OK ) { ijlFree(&jcprops); return 0; }
if ( ijlFree(&jcprops) != IJL_OK ) return 0;
return (void *)pixbuff; }
void * Jpeg::Compress(const void *source, int width, int height, int bpp, int &len, int quality) { JPEG_CORE_PROPERTIES jcprops;
if ( ijlInit(&jcprops) != IJL_OK ) { ijlFree(&jcprops); return false; }
jcprops.DIBWidth = width; jcprops.DIBHeight = height; jcprops.JPGWidth = width; jcprops.JPGHeight = height; jcprops.DIBBytes = (unsigned char *) source; jcprops.DIBPadBytes = 0; jcprops.DIBChannels = bpp; jcprops.JPGChannels = bpp;
if ( bpp == 3 ) { jcprops.DIBColor = IJL_RGB; jcprops.JPGColor = IJL_YCBCR; jcprops.JPGSubsampling = IJL_411; jcprops.DIBSubsampling = (IJL_DIBSUBSAMPLING) 0; } else { jcprops.DIBColor = IJL_G; jcprops.JPGColor = IJL_G; jcprops.JPGSubsampling = (IJL_JPGSUBSAMPLING) 0; jcprops.DIBSubsampling = (IJL_DIBSUBSAMPLING) 0; }
int size = width*height*bpp;
unsigned char * buffer = new unsigned char[size];
jcprops.JPGSizeBytes = size; jcprops.JPGBytes = buffer;
jcprops.jquality = quality;
if ( ijlWrite(&jcprops,IJL_JBUFF_WRITEWHOLEIMAGE) != IJL_OK ) { ijlFree(&jcprops); delete buffer; return 0; }
if ( ijlFree(&jcprops) != IJL_OK ) { delete buffer; return 0; }
len = jcprops.JPGSizeBytes; return buffer; } |