home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / flash078.zip / flashsource-r0_7_8.zip / FTarga.cpp < prev    next >
C/C++ Source or Header  |  2001-07-30  |  1KB  |  75 lines

  1. #include "FTarga.h"
  2. #include <fstream>
  3.  
  4. void FlashTarga::Read()
  5. {
  6.     std::ifstream in(fname,std::ios::binary);
  7.     if(in.fail())
  8.     {
  9.         //    throw(); // ERROR
  10.     }
  11.     
  12.     unsigned char header[18];
  13.     
  14.     if(in.read((char *)header,18).fail())
  15.     {
  16.         //throw();
  17.     }
  18.     if(header[1] == 1)
  19.     {        
  20.         UWORD length  = ((UWORD)header[5] | ((UWORD)header[6] << 8)) + ((UWORD)header[3] | ((UWORD)header[4] << 8));
  21.         UWORD size    = ((UWORD)header[7]);
  22.  
  23.         UDWORD count = length * (size >> 3);
  24.         char *c=(char *)malloc(count);
  25.         if(in.read(c,count).fail())
  26.         {
  27.             //throw();
  28.         }
  29.         free (c);
  30.     }
  31.     if(header[2] != 2)
  32.     {
  33.         //throw();
  34.     }
  35.     if(header[16] != 24)
  36.     {
  37.         //throw();
  38.     }
  39.     if(GetIsolatedBits(header[17],0,4) != 0)
  40.     {
  41.         //throw();
  42.     }
  43.     
  44.     if(header[0] > 0)
  45.     {
  46.         char *c=(char *)malloc(header[0]);
  47.         if(in.read(c,header[0]).fail())
  48.         {
  49.             //throw();
  50.         }
  51.         free (c);
  52.     }
  53.     
  54.     
  55.     width  = ((UWORD)header[12] | ((UWORD)header[13] << 8));
  56.     
  57.     height = ((UWORD)header[14] | ((UWORD)header[15] << 8));
  58.  
  59.     UDWORD size = width*height*3;
  60.     data = (unsigned char *)malloc(size);
  61.  
  62.     for(int i = 0; i < height; i++)
  63.     {                
  64.         
  65.         in.read((char *)(data+i*width*3),(width)*3);
  66.         if(in.fail())
  67.         {
  68.             std::cout << "error\n";
  69.             //throw();
  70.         }              
  71.         //if(in.get() == EOF) throw;
  72.     }
  73. }
  74.  
  75.