home *** CD-ROM | disk | FTP | other *** search
- package animationlib;
-
- import java.awt.image.ColorModel;
- import java.awt.image.IndexColorModel;
- import java.awt.image.MemoryImageSource;
- import java.io.IOException;
- import java.io.InputStream;
-
- class Win3BMPFile {
- Win3BMPFileHeader fileHeader;
- Win3BitmapHeader bitmapHeader;
- Win3ColorPalette palette;
- byte[] rawData;
- byte[] byteData;
- int[] intData;
-
- public void read(InputStream var1) throws IOException, Exception {
- SwappedDataInputStream var2 = new SwappedDataInputStream(var1);
- this.fileHeader = new Win3BMPFileHeader();
- this.fileHeader.read(var2);
- this.bitmapHeader = new Win3BitmapHeader();
- this.bitmapHeader.read(var2);
- this.palette = new Win3ColorPalette(this.bitmapHeader);
- this.palette.read(var2);
- long var3 = (long)this.fileHeader.bitmapOffset - var2.curPos();
- if (var3 > 0L) {
- var2.skip(var3);
- }
-
- int var5 = this.bitmapHeader.scanLineSize;
- if (this.bitmapHeader.bitsPerPixel > 8) {
- this.intData = new int[this.bitmapHeader.width * this.bitmapHeader.height];
- } else {
- this.byteData = new byte[this.bitmapHeader.width * this.bitmapHeader.height];
- }
-
- this.rawData = new byte[this.bitmapHeader.actualSizeOfBitmap];
- int var6 = 0;
- int var7 = (this.bitmapHeader.height - 1) * this.bitmapHeader.width;
-
- for(int var8 = this.bitmapHeader.height - 1; var8 >= 0; --var8) {
- int var9 = var2.read(this.rawData, var6, var5);
- int var10 = 1;
-
- while(var9 < var5 && var10 > 0) {
- var10 = var2.read(this.rawData, var6 + var9, var5 - var9);
- if (var10 > 0) {
- var9 += var10;
- }
- }
-
- if (var9 < var5) {
- throw new Exception("Scan line ended prematurely after " + var9 + " bytes");
- }
-
- if (this.bitmapHeader.bitsPerPixel > 8) {
- this.unpack(this.rawData, var6, this.intData, var7, this.bitmapHeader.width);
- } else {
- this.unpack(this.rawData, var6, this.bitmapHeader.bitsPerPixel, this.byteData, var7, this.bitmapHeader.width);
- }
-
- var6 += var5;
- var7 -= this.bitmapHeader.width;
- }
-
- }
-
- void unpack(byte[] var1, int var2, int[] var3, int var4, int var5) {
- int var6 = var4;
- int var7 = var2;
- short var8 = 255;
-
- for(int var9 = 0; var9 < var5; ++var9) {
- int var10 = var1[var7++] & var8;
- int var11 = (var1[var7++] & var8) << 8;
- int var12 = (var1[var7++] & var8) << 16;
- var3[var6] = -16777216;
- var3[var6] |= var10;
- var3[var6] |= var11;
- var3[var6] |= var12;
- ++var6;
- }
-
- }
-
- void unpack(byte[] var1, int var2, int var3, byte[] var4, int var5, int var6) throws Exception {
- int var7 = var5;
- int var8 = var2;
- byte var9;
- byte var10;
- switch (var3) {
- case 1:
- var9 = 1;
- var10 = 8;
- break;
- case 4:
- var9 = 15;
- var10 = 2;
- break;
- case 8:
- var9 = -1;
- var10 = 1;
- break;
- default:
- throw new Exception("Unsupported bits-per-pixel value");
- }
-
- int var11 = 0;
-
- while(true) {
- int var12 = 8 - var3;
-
- for(int var13 = 0; var13 < var10; ++var13) {
- byte var14 = var1[var8];
- var14 = (byte)(var14 >> var12);
- var4[var7] = (byte)(var14 & var9);
- ++var7;
- ++var11;
- if (var11 == var6) {
- return;
- }
-
- var12 -= var3;
- }
-
- ++var8;
- }
- }
-
- public void dumpData() {
- }
-
- public MemoryImageSource makeImageSource() {
- Object var1;
- if (this.palette.noOfEntries > 0) {
- var1 = new IndexColorModel(this.bitmapHeader.bitsPerPixel, this.palette.noOfEntries, this.palette.r, this.palette.g, this.palette.b);
- } else {
- var1 = ColorModel.getRGBdefault();
- }
-
- MemoryImageSource var2;
- if (this.bitmapHeader.bitsPerPixel > 8) {
- var2 = new MemoryImageSource(this.bitmapHeader.width, this.bitmapHeader.height, (ColorModel)var1, this.intData, 0, this.bitmapHeader.width);
- } else {
- var2 = new MemoryImageSource(this.bitmapHeader.width, this.bitmapHeader.height, (ColorModel)var1, this.byteData, 0, this.bitmapHeader.width);
- }
-
- return var2;
- }
- }
-