home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 24 / CDACTUAL24.iso / corel / BARISTA / ANIMATIONLIB / WIN3BMPFILE.CLASS (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-24  |  3.3 KB  |  151 lines

  1. package animationlib;
  2.  
  3. import java.awt.image.ColorModel;
  4. import java.awt.image.IndexColorModel;
  5. import java.awt.image.MemoryImageSource;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8.  
  9. class Win3BMPFile {
  10.    Win3BMPFileHeader fileHeader;
  11.    Win3BitmapHeader bitmapHeader;
  12.    Win3ColorPalette palette;
  13.    byte[] rawData;
  14.    byte[] byteData;
  15.    int[] intData;
  16.  
  17.    public void read(InputStream var1) throws IOException, Exception {
  18.       SwappedDataInputStream var2 = new SwappedDataInputStream(var1);
  19.       this.fileHeader = new Win3BMPFileHeader();
  20.       this.fileHeader.read(var2);
  21.       this.bitmapHeader = new Win3BitmapHeader();
  22.       this.bitmapHeader.read(var2);
  23.       this.palette = new Win3ColorPalette(this.bitmapHeader);
  24.       this.palette.read(var2);
  25.       long var3 = (long)this.fileHeader.bitmapOffset - var2.curPos();
  26.       if (var3 > 0L) {
  27.          var2.skip(var3);
  28.       }
  29.  
  30.       int var5 = this.bitmapHeader.scanLineSize;
  31.       if (this.bitmapHeader.bitsPerPixel > 8) {
  32.          this.intData = new int[this.bitmapHeader.width * this.bitmapHeader.height];
  33.       } else {
  34.          this.byteData = new byte[this.bitmapHeader.width * this.bitmapHeader.height];
  35.       }
  36.  
  37.       this.rawData = new byte[this.bitmapHeader.actualSizeOfBitmap];
  38.       int var6 = 0;
  39.       int var7 = (this.bitmapHeader.height - 1) * this.bitmapHeader.width;
  40.  
  41.       for(int var8 = this.bitmapHeader.height - 1; var8 >= 0; --var8) {
  42.          int var9 = var2.read(this.rawData, var6, var5);
  43.          int var10 = 1;
  44.  
  45.          while(var9 < var5 && var10 > 0) {
  46.             var10 = var2.read(this.rawData, var6 + var9, var5 - var9);
  47.             if (var10 > 0) {
  48.                var9 += var10;
  49.             }
  50.          }
  51.  
  52.          if (var9 < var5) {
  53.             throw new Exception("Scan line ended prematurely after " + var9 + " bytes");
  54.          }
  55.  
  56.          if (this.bitmapHeader.bitsPerPixel > 8) {
  57.             this.unpack(this.rawData, var6, this.intData, var7, this.bitmapHeader.width);
  58.          } else {
  59.             this.unpack(this.rawData, var6, this.bitmapHeader.bitsPerPixel, this.byteData, var7, this.bitmapHeader.width);
  60.          }
  61.  
  62.          var6 += var5;
  63.          var7 -= this.bitmapHeader.width;
  64.       }
  65.  
  66.    }
  67.  
  68.    void unpack(byte[] var1, int var2, int[] var3, int var4, int var5) {
  69.       int var6 = var4;
  70.       int var7 = var2;
  71.       short var8 = 255;
  72.  
  73.       for(int var9 = 0; var9 < var5; ++var9) {
  74.          int var10 = var1[var7++] & var8;
  75.          int var11 = (var1[var7++] & var8) << 8;
  76.          int var12 = (var1[var7++] & var8) << 16;
  77.          var3[var6] = -16777216;
  78.          var3[var6] |= var10;
  79.          var3[var6] |= var11;
  80.          var3[var6] |= var12;
  81.          ++var6;
  82.       }
  83.  
  84.    }
  85.  
  86.    void unpack(byte[] var1, int var2, int var3, byte[] var4, int var5, int var6) throws Exception {
  87.       int var7 = var5;
  88.       int var8 = var2;
  89.       byte var9;
  90.       byte var10;
  91.       switch (var3) {
  92.          case 1:
  93.             var9 = 1;
  94.             var10 = 8;
  95.             break;
  96.          case 4:
  97.             var9 = 15;
  98.             var10 = 2;
  99.             break;
  100.          case 8:
  101.             var9 = -1;
  102.             var10 = 1;
  103.             break;
  104.          default:
  105.             throw new Exception("Unsupported bits-per-pixel value");
  106.       }
  107.  
  108.       int var11 = 0;
  109.  
  110.       while(true) {
  111.          int var12 = 8 - var3;
  112.  
  113.          for(int var13 = 0; var13 < var10; ++var13) {
  114.             byte var14 = var1[var8];
  115.             var14 = (byte)(var14 >> var12);
  116.             var4[var7] = (byte)(var14 & var9);
  117.             ++var7;
  118.             ++var11;
  119.             if (var11 == var6) {
  120.                return;
  121.             }
  122.  
  123.             var12 -= var3;
  124.          }
  125.  
  126.          ++var8;
  127.       }
  128.    }
  129.  
  130.    public void dumpData() {
  131.    }
  132.  
  133.    public MemoryImageSource makeImageSource() {
  134.       Object var1;
  135.       if (this.palette.noOfEntries > 0) {
  136.          var1 = new IndexColorModel(this.bitmapHeader.bitsPerPixel, this.palette.noOfEntries, this.palette.r, this.palette.g, this.palette.b);
  137.       } else {
  138.          var1 = ColorModel.getRGBdefault();
  139.       }
  140.  
  141.       MemoryImageSource var2;
  142.       if (this.bitmapHeader.bitsPerPixel > 8) {
  143.          var2 = new MemoryImageSource(this.bitmapHeader.width, this.bitmapHeader.height, (ColorModel)var1, this.intData, 0, this.bitmapHeader.width);
  144.       } else {
  145.          var2 = new MemoryImageSource(this.bitmapHeader.width, this.bitmapHeader.height, (ColorModel)var1, this.byteData, 0, this.bitmapHeader.width);
  146.       }
  147.  
  148.       return var2;
  149.    }
  150. }
  151.