home *** CD-ROM | disk | FTP | other *** search
/ ST-Computer Leser 2002 January / STC_CD_01_2002.iso / APP / ANIPL218 / PROG / SLB / JPEG / EXAMPLE.C next >
C/C++ Source or Header  |  2001-08-19  |  5KB  |  98 lines

  1. #include <osbind.h>
  2. #include <stdio.h>
  3. #include "jpeglib.h"
  4. #include "slb.h"
  5.  
  6. #define slb_jpeg_std_error(jerr)    (struct jpeg_error_mgr *)(*slbexec)(slb, 0L, (short)3, (short)0, (struct jpeg_error_mgr *)jerr)
  7. #define slb_jpeg_create_compress(cinfo)    (void)(*slbexec)(slb, 1L, (short)3, (short)0, (j_compress_ptr) cinfo)
  8. #define slb_jpeg_stdio_dest(cinfo, handle)    (void)(*slbexec)(slb, 2L, (short)5, (short)0, (j_compress_ptr)cinfo, (long)handle)
  9. #define slb_jpeg_set_defaults(cinfo)    (void)(*slbexec)(slb, 3L, (short)3, (short)0, (j_compress_ptr)cinfo)
  10. #define slb_jpeg_set_quality(cinfo, quality, force_baseline)    (void)(*slbexec)(slb, 4L, (short)7, (short)0, (j_compress_ptr)cinfo, (long)quality, (long)force_baseline)
  11. #define slb_jpeg_start_compress(cinfo, write_all_tables)    (void)(*slbexec)(slb, 5L, (short)5, (short)0, (j_compress_ptr)cinfo, (long)write_all_tables)
  12. #define slb_jpeg_write_scanlines(cinfo, scanlines, num_lines)    (JDIMENSION)(*slbexec)(slb, 6L, (short)7, (short)0, (j_compress_ptr)cinfo, (JSAMPARRAY)scanlines, (long)num_lines)
  13. #define slb_jpeg_finish_compress(cinfo)    (void)(*slbexec)(slb, 7L, (short)3, (short)0, (j_compress_ptr *)cinfo)
  14. #define slb_jpeg_destroy_compress(cinfo)    (void)(*slbexec)(slb, 8L, (short)3, (short)0, (j_compress_ptr)cinfo)
  15. #define slb_jpeg_create_decompress(cinfo)    (void)(*slbexec)(slb, 9L, (short)3, (short)0, (j_compress_ptr)cinfo)
  16. #define slb_jpeg_stdio_src(cinfo, handle)    (void)(*slbexec)(slb, 10L, (short)5, (short)0, (j_decompress_ptr)cinfo, (long)handle)
  17. #define slb_jpeg_read_header(cinfo, require_image)    (int)(*slbexec)(slb, 11L, (short)5, (short)0, (j_decompress_ptr)cinfo, (long)require_image)
  18. #define slb_jpeg_start_decompress(cinfo)    (boolean)(*slbexec)(slb, 12L, (short)3, (short)0, (j_decompress_ptr)cinfo)
  19. #define slb_jpeg_read_scanlines(cinfo, scanlines, max_lines)    (JDIMENSION)(*slbexec)(slb, 13L, (short)7, (short)0, (j_decompress_ptr)cinfo, (JSAMPARRAY)scanlines, (long)max_lines)
  20. #define slb_jpeg_finish_decompress(cinfo)    (boolean)(*slbexec)(slb, 14L, 3L, (short)0, (j_decompress_ptr)cinfo)
  21. #define slb_jpeg_destroy_decompress(cinfo)    (void)(*slbexec)(slb, 15L, (short)3, (short)0, (j_decompress_ptr)cinfo)
  22.  
  23. SLB_EXEC     slbexec;
  24. SHARED_LIB   slb;
  25.  
  26. extern JSAMPLE * image_buffer;    /* Points to large array of R,G,B-order data */
  27. extern int image_height;    /* Number of rows in image */
  28. extern int image_width;        /* Number of columns in image */
  29. extern void    put_scanline_someplace(JSAMPARRAY buffer, int row_stride);
  30.  
  31. void write_JPEG_file (char * filename, int quality)
  32. {
  33.     struct jpeg_compress_struct cinfo;
  34.     struct jpeg_error_mgr jerr;
  35.     long handle;
  36.     JSAMPROW row_pointer[1];    /* pointer to JSAMPLE row[s] */
  37.     int row_stride;        /* physical row width in image buffer */
  38.  
  39.     if(Slbopen("JPEG.SLB", ".\\", 1L, &slb, &slbexec) >= 0)
  40.     {  
  41.         if((handle = Fcreate(filename, 0)) >= 0)
  42.           {
  43.             cinfo.err = slb_jpeg_std_error(&jerr);
  44.             slb_jpeg_create_compress(&cinfo);
  45.             slb_jpeg_stdio_dest(&cinfo, handle);
  46.             cinfo.image_width = image_width;     /* image width and height, in pixels */
  47.             cinfo.image_height = image_height;
  48.             cinfo.input_components = 3;        /* # of color components per pixel */
  49.             cinfo.in_color_space = JCS_RGB;     /* colorspace of input image */
  50.             slb_jpeg_set_defaults(&cinfo);
  51.             slb_jpeg_set_quality(&cinfo, quality, TRUE );
  52.             slb_jpeg_start_compress(&cinfo, TRUE);
  53.             row_stride = image_width * 3;    /* JSAMPLEs per row in image_buffer */
  54.             while(cinfo.next_scanline < cinfo.image_height)
  55.             {
  56.                 row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride];
  57.                 (void)slb_jpeg_write_scanlines(&cinfo, row_pointer, 1);
  58.             }
  59.             slb_jpeg_finish_compress(&cinfo);
  60.             slb_jpeg_destroy_compress(&cinfo);
  61.             Fclose(handle);
  62.         }
  63.         Slbclose(slb);        
  64.     }
  65. }
  66.  
  67. void read_JPEG_file (char * filename)
  68. {
  69.     struct jpeg_decompress_struct cinfo;
  70.     struct jpeg_error_mgr jerr;
  71.     long handle;
  72.     JSAMPARRAY buffer;        /* Output row buffer */
  73.     int row_stride;        /* physical row width in output buffer */
  74.  
  75.     if(Slbopen("JPEG.SLB", ".\\", 1L, &slb, &slbexec) >= 0)
  76.     {  
  77.       if((handle = Fopen(filename, 0)) >= 0)
  78.       {
  79.             cinfo.err = slb_jpeg_std_error(&jerr);
  80.             slb_jpeg_create_decompress(&cinfo);
  81.             slb_jpeg_stdio_src(&cinfo, handle);
  82.             (void)slb_jpeg_read_header(&cinfo, TRUE);
  83.             (void)slb_jpeg_start_decompress(&cinfo);
  84.             row_stride = cinfo.output_width * cinfo.output_components;
  85.             buffer = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);
  86.             while(cinfo.output_scanline < cinfo.output_height)
  87.             {
  88.                 (void)slb_jpeg_read_scanlines(&cinfo, buffer, 1);
  89.                 put_scanline_someplace(buffer, row_stride);
  90.             }
  91.             (void)slb_jpeg_finish_decompress(&cinfo);
  92.             slb_jpeg_destroy_decompress(&cinfo);
  93.             Fclose(handle);
  94.         }
  95.         Slbclose(slb);        
  96.     }
  97. }
  98.