home *** CD-ROM | disk | FTP | other *** search
/ RISC DISC 2 / RISC_DISC_2.iso / pd_share / program / sprtools / c / bmp_info next >
Encoding:
Text File  |  1995-02-02  |  3.6 KB  |  111 lines

  1. /************************************************************************
  2.  *                                    *
  3.  * BMP bitmap information                        *
  4.  *                                    *
  5.  * Version 3.00 (02-Feb-1995)                        *
  6.  *                                    *
  7.  * (C) 1993-5 DEEJ Technology PLC                    *
  8.  *                                    *
  9.  ************************************************************************/
  10.  
  11. #include <stdio.h>
  12. #include <string.h>
  13. #include "io.h"
  14. #include "bmp.h"
  15.  
  16. int main(int argc, char** argv)
  17. {
  18.         int  i;
  19.         uint rgb,r,g,b;
  20.         FILE *file;
  21.         bmp_hdr_str hdr;
  22.  
  23.         if(argc>1 && strcmp(argv[argc-1],"-c")!=0)
  24.                 file = fopen(argv[argc-1],"r");
  25.         else
  26.                 file = stdin;
  27.  
  28.         if(file == 0)
  29.         {
  30.                 fprintf(stderr,"Could not open file\n");
  31.                 return(1);
  32.         }
  33.  
  34.         read_struct(LE, (BYTE*)&hdr, bmp_rhdr_descr, file);
  35.  
  36.            printf("ID characters       : '%c%c'\n",hdr.id[0],hdr.id[1]);
  37.         printf("File size           : %d\n",hdr.file_size);
  38.         printf("Offset to bitmap    : %d\n",hdr.bitmap_offset);
  39.         printf("Sub header size     : %d\n",hdr.subheader_size);
  40.  
  41.         if(hdr.subheader_size != 12)
  42.         {
  43.             read_struct(LE, (BYTE*)&hdr.width, bmp_shdr1_descr, file);
  44.  
  45.             printf("Width in pixels     : %d\n",hdr.width);
  46.             printf("Height in pixels    : %d\n",hdr.height);
  47.             printf("Bit planes (1)      : %d\n",hdr.bit_planes);
  48.             printf("Bits per pixel      : %d\n",hdr.bits_per_pixel);
  49.             printf("Compression scheme  : %d\n",hdr.compression);
  50.             printf("Size of bitmap data : %d\n",hdr.bitmap_size);
  51.             printf("X pixels per meter  : %d\n",hdr.X_pix_per_meter);
  52.             printf("Y pixels per meter  : %d\n",hdr.Y_pix_per_meter);
  53.             printf("No. palette entries : %d\n",hdr.palette_entries);
  54.             printf("Number of colours   : %d\n",hdr.colours);
  55.         }
  56.         else
  57.         {
  58.                 bmp_shdr2_str shdr;
  59.  
  60.             read_struct(LE, (BYTE*)&shdr, bmp_shdr2_descr, file);
  61.  
  62.              hdr.width           = shdr.width;
  63.             hdr.height          = shdr.height;
  64.             hdr.bit_planes      = shdr.bit_planes;
  65.             hdr.bits_per_pixel  = shdr.bits_per_pixel;
  66.                    hdr.palette_entries = 1<<shdr.bits_per_pixel;
  67.  
  68.             printf("Width in pixels     : %d\n",hdr.width);
  69.             printf("Height in pixels    : %d\n",hdr.height);
  70.             printf("Bit planes (1)      : %d\n",hdr.bit_planes);
  71.             printf("Bits per pixel      : %d\n",hdr.bits_per_pixel);
  72.         }
  73.  
  74.         if(argc>1 && strcmp(argv[1],"-c")==0)
  75.         {
  76.                 printf("\n");
  77.                 if(hdr.palette_entries!=0)
  78.                 {
  79.                         printf("Palette red,green,blue\n");
  80.                         printf("Palette BBGGRRXX  red,green,blue\n");
  81.  
  82.                         for(i=0; i<(int)hdr.palette_entries; i++)
  83.                         {
  84.                 if(hdr.subheader_size == 12)
  85.                 {
  86.                                     r   = fgetc(file);
  87.                                     g   = fgetc(file);
  88.                                     b   = fgetc(file);
  89.                                     rgb = (b<<24) | (g<<16) | (r<<8);
  90.                 }
  91.                 else
  92.                 {
  93.                                     rgb = endian(BE,fgetdLE(file));
  94.                                     r = (rgb >>  8) & 0xFF;
  95.                                     g = (rgb >> 16) & 0xFF;
  96.                                     b = (rgb >> 24) & 0xFF;
  97.                                 }
  98.  
  99.                                 printf("%5d : %08X  %3d %3d %3d\n",
  100.                                         i, rgb, r, g, b);
  101.                         }
  102.                 }
  103.                 else
  104.                 {
  105.                         printf("BMP has no palette\n");
  106.                 }
  107.         }
  108.  
  109.         fclose(file);
  110. }
  111.