home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161b.iso / handson / archive / Issue159 / files / copyjava.exe / ex1 / GIFGraphics.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-10-03  |  3.7 KB  |  208 lines

  1. import java.awt.Component;
  2. import java.awt.Image;
  3. import java.awt.MediaTracker;
  4. import java.awt.Rectangle;
  5. import java.awt.image.PixelGrabber;
  6.  
  7. public class GIFGraphics {
  8.    public int[] pixels;
  9.    public int width;
  10.    public int height;
  11.    int colour;
  12.    static int[] Red = new int[256];
  13.    static int[] Green = new int[256];
  14.    static int[] Blue = new int[256];
  15.    int left;
  16.    int top;
  17.  
  18.    GIFGraphics(Image var1, Component var2) {
  19.       this(var1, var2, 0, 0);
  20.    }
  21.  
  22.    GIFGraphics(Image var1, Component var2, int var3, int var4) {
  23.       this.left = var3;
  24.       this.top = var4;
  25.       MediaTracker var7 = new MediaTracker(var2);
  26.       var7.addImage(var1, 1);
  27.  
  28.       try {
  29.          var7.waitForID(1);
  30.          this.width = var1.getWidth(var2);
  31.          this.height = var1.getHeight(var2);
  32.          int var5 = this.width * this.height;
  33.          int[] var6 = new int[var5];
  34.          this.pixels = new int[this.width * this.height];
  35.          PixelGrabber var8 = new PixelGrabber(var1, 0, 0, this.width, this.height, var6, 0, this.width);
  36.  
  37.          try {
  38.             var8.grabPixels();
  39.  
  40.             for(int var9 = 0; var9 < this.width; ++var9) {
  41.                for(int var10 = 0; var10 < this.height; ++var10) {
  42.                   int var11 = (var6[var10 * this.width + var9] & 16711680) >> 16;
  43.                   int var12 = (var6[var10 * this.width + var9] & '\uff00') >> 8;
  44.                   int var13 = var6[var10 * this.width + var9] & 255;
  45.                   int var14 = var11 % 51;
  46.                   int var15 = var12 % 51;
  47.                   int var16 = var13 % 51;
  48.                   if (var9 < this.width - 1) {
  49.                      int var17 = (var6[var10 * this.width + var9 + 1] & 16711680) >> 16;
  50.                      var17 += 7 * var14 / 16;
  51.                      if (var17 > 255) {
  52.                         var17 = 255;
  53.                      }
  54.  
  55.                      int var18 = (var6[var10 * this.width + var9 + 1] & '\uff00') >> 8;
  56.                      var18 += 7 * var15 / 16;
  57.                      if (var18 > 255) {
  58.                         var18 = 255;
  59.                      }
  60.  
  61.                      int var19 = var6[var10 * this.width + var9 + 1] & 255;
  62.                      var19 += 7 * var16 / 16;
  63.                      if (var19 > 255) {
  64.                         var19 = 255;
  65.                      }
  66.  
  67.                      var6[var10 * this.width + var9 + 1] = (var17 << 16) + (var18 << 8) + var19;
  68.                   }
  69.  
  70.                   if (var9 > 0 && var10 < this.height - 1) {
  71.                      int var23 = (var6[(var10 + 1) * this.width + var9 - 1] & 16711680) >> 16;
  72.                      var23 += 3 * var14 / 16;
  73.                      if (var23 > 255) {
  74.                         var23 = 255;
  75.                      }
  76.  
  77.                      int var30 = (var6[(var10 + 1) * this.width + var9 - 1] & '\uff00') >> 8;
  78.                      var30 += 3 * var15 / 16;
  79.                      if (var30 > 255) {
  80.                         var30 = 255;
  81.                      }
  82.  
  83.                      int var37 = var6[(var10 + 1) * this.width + var9 - 1] & 255;
  84.                      var37 += 3 * var16 / 16;
  85.                      if (var37 > 255) {
  86.                         var37 = 255;
  87.                      }
  88.  
  89.                      var6[(var10 + 1) * this.width + var9 - 1] = (var23 << 16) + (var30 << 8) + var37;
  90.                   }
  91.  
  92.                   if (var10 < this.height - 1) {
  93.                      int var25 = (var6[(var10 + 1) * this.width + var9] & 16711680) >> 16;
  94.                      var25 += 5 * var14 / 16;
  95.                      if (var25 > 255) {
  96.                         var25 = 255;
  97.                      }
  98.  
  99.                      int var32 = (var6[(var10 + 1) * this.width + var9] & '\uff00') >> 8;
  100.                      var32 += 5 * var15 / 16;
  101.                      if (var32 > 255) {
  102.                         var32 = 255;
  103.                      }
  104.  
  105.                      int var39 = var6[(var10 + 1) * this.width + var9] & 255;
  106.                      var39 += 5 * var16 / 16;
  107.                      if (var39 > 255) {
  108.                         var39 = 255;
  109.                      }
  110.  
  111.                      var6[(var10 + 1) * this.width + var9] = (var25 << 16) + (var32 << 8) + var39;
  112.                   }
  113.  
  114.                   if (var9 < this.width - 1 && var10 < this.height - 1) {
  115.                      int var27 = (var6[(var10 + 1) * this.width + var9 + 1] & 16711680) >> 16;
  116.                      var27 += var14 / 16;
  117.                      if (var27 > 255) {
  118.                         var27 = 255;
  119.                      }
  120.  
  121.                      int var34 = (var6[(var10 + 1) * this.width + var9 + 1] & '\uff00') >> 8;
  122.                      var34 += var15 / 16;
  123.                      if (var34 > 255) {
  124.                         var34 = 255;
  125.                      }
  126.  
  127.                      int var41 = var6[(var10 + 1) * this.width + var9 + 1] & 255;
  128.                      var41 += var16 / 16;
  129.                      if (var41 > 255) {
  130.                         var41 = 255;
  131.                      }
  132.  
  133.                      var6[(var10 + 1) * this.width + var9 + 1] = (var27 << 16) + (var34 << 8) + var41;
  134.                   }
  135.  
  136.                   if (var11 - var14 == 0 && var12 - var15 == 0 && var13 - var16 == 0) {
  137.                      this.pixels[var10 * this.width + var9] = 255;
  138.                   } else {
  139.                      this.pixels[var10 * this.width + var9] = 36 * (var11 - var14) / 51 + 6 * (var12 - var15) / 51 + (var13 - var16) / 51 + 1;
  140.                   }
  141.                }
  142.             }
  143.  
  144.          } catch (Exception var20) {
  145.             System.out.println("Unable to grab pixels: " + var20);
  146.          }
  147.       } catch (Exception var21) {
  148.          System.out.println("Unable to load image: " + var21);
  149.       }
  150.    }
  151.  
  152.    public void cropTo(Rectangle var1) {
  153.       int var2 = var1.x;
  154.       int var3 = var1.y;
  155.       int var4 = var1.width;
  156.       int var5 = var1.height;
  157.       int[] var6 = new int[var4 * var5];
  158.       int var7 = 0;
  159.  
  160.       for(int var8 = var3; var8 < var3 + var5; ++var8) {
  161.          for(int var9 = var2; var9 < var2 + var4; ++var9) {
  162.             var6[var7] = this.pixels[var8 * this.width + var9];
  163.             ++var7;
  164.          }
  165.       }
  166.  
  167.       this.top = var3;
  168.       this.left = var2;
  169.       this.width = var4;
  170.       this.height = var5;
  171.       this.pixels = var6;
  172.    }
  173.  
  174.    public int getPixel(int var1, int var2) {
  175.       return this.pixels[var2 * this.width + var1];
  176.    }
  177.  
  178.    public int[] getPixels() {
  179.       return this.pixels;
  180.    }
  181.  
  182.    static {
  183.       int var0 = 1;
  184.       Red[0] = 0;
  185.       Green[0] = 0;
  186.       Blue[0] = 0;
  187.  
  188.       for(int var1 = 0; var1 < 6; ++var1) {
  189.          for(int var2 = 0; var2 < 6; ++var2) {
  190.             for(int var3 = 0; var3 < 6; ++var3) {
  191.                Red[var0] = var1 * 51;
  192.                Green[var0] = var2 * 51;
  193.                Blue[var0] = var3 * 51;
  194.                ++var0;
  195.             }
  196.          }
  197.       }
  198.  
  199.       while(var0 < 256) {
  200.          Red[var0] = 0;
  201.          Green[var0] = 0;
  202.          Blue[var0] = 0;
  203.          ++var0;
  204.       }
  205.  
  206.    }
  207. }
  208.