54   struct jpeg_destination_mgr pub; 
    56   std::ostream * outfile;            
    60 typedef my_destination_mgr * my_dest_ptr;
    62 #define OUTPUT_BUF_SIZE  4096       71 init_destination (j_compress_ptr cinfo)
    73   my_dest_ptr dest = (my_dest_ptr) cinfo->dest;
    76   dest->buffer = (JOCTET *)
    77       (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
    78                                   OUTPUT_BUF_SIZE * 
sizeof(JOCTET));
    80   dest->pub.next_output_byte = dest->buffer;
    81   dest->pub.free_in_buffer = OUTPUT_BUF_SIZE;
   109 empty_output_buffer (j_compress_ptr cinfo)
   111   my_dest_ptr dest = (my_dest_ptr) cinfo->dest;
   113   if (!dest->outfile->write((
const char *)dest->buffer, OUTPUT_BUF_SIZE))
   114     ERREXIT(cinfo, JERR_FILE_WRITE);
   116   dest->pub.next_output_byte = dest->buffer;
   117   dest->pub.free_in_buffer = OUTPUT_BUF_SIZE;
   134 term_destination (j_compress_ptr cinfo)
   136   my_dest_ptr dest = (my_dest_ptr) cinfo->dest;
   137   size_t datacount = OUTPUT_BUF_SIZE - dest->pub.free_in_buffer;
   141     if (!dest->outfile->write((
const char *)dest->buffer, datacount))
   142       ERREXIT(cinfo, JERR_FILE_WRITE);
   144   dest->outfile->flush();
   147   if (dest->outfile->fail())
   148     ERREXIT(cinfo, JERR_FILE_WRITE);
   159 jpeg_ostream_dest (j_compress_ptr cinfo, std::ostream * outfile)
   169   if (cinfo->dest == 
nullptr) {    
   170     cinfo->dest = (
struct jpeg_destination_mgr *)
   171       (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
   172                                   sizeof(my_destination_mgr));
   175   dest = (my_dest_ptr) cinfo->dest;
   176   dest->pub.init_destination = init_destination;
   177   dest->pub.empty_output_buffer = empty_output_buffer;
   178   dest->pub.term_destination = term_destination;
   179   dest->outfile = outfile;
   189 PNMFileTypeJPG::Writer::
   190 Writer(
PNMFileType *type, std::ostream *file, 
bool owns_file) :
   211 int PNMFileTypeJPG::Writer::
   212 write_data(
xel *array, xelval *) {
   213   if (_y_size<=0 || _x_size<=0) {
   223   struct jpeg_compress_struct cinfo;
   232   struct jpeg_error_mgr jerr;
   234   JSAMPROW row_pointer[1];      
   244   cinfo.err = jpeg_std_error(&jerr);
   247   jpeg_create_compress(&cinfo);
   251   jpeg_ostream_dest(&cinfo, _file);
   258   cinfo.image_width = _x_size;      
   259   cinfo.image_height = _y_size;
   260   if (is_grayscale()) {
   261     cinfo.input_components = 1;
   262     cinfo.in_color_space = JCS_GRAYSCALE;
   264     cinfo.input_components = 3;
   265     cinfo.in_color_space = JCS_RGB;
   271   jpeg_set_defaults(&cinfo);
   275   jpeg_set_quality(&cinfo, jpeg_quality, TRUE );
   282   jpeg_start_compress(&cinfo, TRUE);
   285   if (_comment.size()) {
   287       &cinfo, JPEG_COM, (JOCTET *)_comment.c_str(), strlen(_comment.c_str()));
   298   row_stride = _x_size * cinfo.input_components; 
   301   JSAMPROW row = 
new JSAMPLE[row_stride];
   302   while (cinfo.next_scanline < cinfo.image_height) {
   307     for (
int i = 0; i < row_stride; i += cinfo.input_components) {
   308       if (cinfo.input_components == 1) {
   309         row[i] = (JSAMPLE)(MAXJSAMPLE * PPM_GETB(array[x])/_maxval);
   311         row[i] = (JSAMPLE)(MAXJSAMPLE * PPM_GETR(array[x])/_maxval);
   312         row[i+1] = (JSAMPLE)(MAXJSAMPLE * PPM_GETG(array[x])/_maxval);
   313         row[i+2] = (JSAMPLE)(MAXJSAMPLE * PPM_GETB(array[x])/_maxval);
   319     row_pointer[0] = row;
   320     (void) jpeg_write_scanlines(&cinfo, row_pointer, 1);
   326   jpeg_finish_compress(&cinfo);
   331   jpeg_destroy_compress(&cinfo);
 PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
 
This is the base class of a family of classes that represent particular image file types that PNMImag...
 
static void consider_yield()
Possibly suspends the current thread for the rest of the current epoch, if it has run for enough this...
 
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
 
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
 
This is an abstract base class that defines the interface for writing image files of various types.
 
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
 
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.