Я предполагаю, что вы работаете в Linux. Из libjpeg.doc:
Грубый контур JPEG
операция сжатия:
ассигновать
и инициализировать сжатие JPEG
объект
Укажите пункт назначения для
сжатые данные (например, файл)
Задавать
параметры для сжатия, в том числе
размер изображения и цветовое пространство
jpeg_start_compress (...);
в то время как
(строки сканирования еще не написаны)
jpeg_write_scanlines (...);
jpeg_finish_compress (...);
Релиз
объект сжатия JPEG
Реальный трюк для того, чтобы делать то, что вы хотите сделать, это предоставить пользовательский «менеджер назначения данных (или источника)», который определен в jpeglib.h:
struct jpeg_destination_mgr {
JOCTET * next_output_byte; /* => next byte to write in buffer */
size_t free_in_buffer; /* # of byte spaces remaining in buffer */
JMETHOD(void, init_destination, (j_compress_ptr cinfo));
JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo));
JMETHOD(void, term_destination, (j_compress_ptr cinfo));
};
По сути, установите это так, чтобы ваш источник и / или назначение были теми буферами памяти, которые вам нужны, и вы должны быть в порядке.
Кроме того, этот пост может быть намного лучше, но документация по libjpeg62, прямо скажем, превосходна. Просто apt-get libjpeg62-dev, прочитайте libjpeg.doc и посмотрите на example.c. Если вы столкнулись с проблемами и не можете заставить что-то работать, просто напишите снова, и я уверен, что кто-то сможет помочь.