Files
Jungfraujoch/export_images/WriteJPEG.cpp

41 lines
1.1 KiB
C++

// Copyright (2019-2024) Paul Scherrer Institute
#ifdef JFJOCH_USE_JPEG
#include <cstdio>
#include <cstdint>
#include <cstddef>
#include <vector>
#include <jpeglib.h>
#endif
void WriteJPEG(const std::vector<char> &input, size_t width, size_t height) {
unsigned char *buf;
unsigned long buf_size;
struct jpeg_compress_struct cinfo;
struct jpeg_error_mgr jerr;
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_compress(&cinfo);
jpeg_mem_dest(&cinfo, &buf, &buf_size);
cinfo.image_width = width;
cinfo.image_height = height;
cinfo.input_components = 3;
cinfo.in_color_space = JCS_RGB;
jpeg_set_defaults(&cinfo);
/*set the quality [0..100] */
jpeg_set_quality (&cinfo, 75, true);
jpeg_start_compress(&cinfo, true);
JSAMPROW row_pointer; /* pointer to a single row */
while (cinfo.next_scanline < cinfo.image_height) {
row_pointer = (JSAMPROW) (input.data() + cinfo.next_scanline*(sizeof(char)>>3)*width);
jpeg_write_scanlines(&cinfo, &row_pointer, 1);
}
jpeg_finish_compress(&cinfo);
jpeg_destroy_compress(&cinfo);
}