Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июня!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.

Класс для работы с Jpeg

Автор John W. Ratcliff

Данный класс позволять производить компрессию и декомпрессию изображений в формате Jpeg, используя библиотеку Intel Jpeg Library.

Эта библиотека позволяет оперировать изображением с помощью всего одной DLL. Для работы с этой библиотекой достаточно добавить в Ваш проект файлы из бибилиотеки IJL.H, IJL.LIB, IJL.DLL. Саму бибилиотеку можно найти по адресу
http://www-cs.intel.com/support/performancetools/libraries/ijl/index.htm .
Там Вас попросят зарегистрироваться и ждать письма на почтовый ящик о регистрации (на мой взгляд довольно утомительно) , а здесь можно взять без регистрации.

В библиотеку включены несколько примеров, которые помогут Вам разобраться с Интеловким классом.

Скачать: jpeg.cpp

  Листинг (пример использования библиотеки для работы с 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 jratcliff@verant.com                      ##
 
 //############################################################################
 
 
 
 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 jratcliff@verant.com                      ##
 
 //############################################################################
 
 #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;
 
 }
 
 
 
 


<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS