home *** CD-ROM | disk | FTP | other *** search
/ PC User 1998 October / Image.iso / BROWSER / CLASSES.ZIP / JAVA / AWT / IMAGE / DirectColorModel.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-04-14  |  2.1 KB  |  146 lines

  1. package java.awt.image;
  2.  
  3. public class DirectColorModel extends ColorModel {
  4.    private int red_mask;
  5.    private int green_mask;
  6.    private int blue_mask;
  7.    private int alpha_mask;
  8.    private int red_offset;
  9.    private int green_offset;
  10.    private int blue_offset;
  11.    private int alpha_offset;
  12.    private int red_scale;
  13.    private int green_scale;
  14.    private int blue_scale;
  15.    private int alpha_scale;
  16.    private int accum_mask;
  17.  
  18.    public DirectColorModel(int var1, int var2, int var3, int var4) {
  19.       this(var1, var2, var3, var4, 0);
  20.    }
  21.  
  22.    public DirectColorModel(int var1, int var2, int var3, int var4, int var5) {
  23.       super(var1);
  24.       this.red_mask = var2;
  25.       this.green_mask = var3;
  26.       this.blue_mask = var4;
  27.       this.alpha_mask = var5;
  28.       this.CalculateOffsets();
  29.    }
  30.  
  31.    public final int getRedMask() {
  32.       return this.red_mask;
  33.    }
  34.  
  35.    public final int getGreenMask() {
  36.       return this.green_mask;
  37.    }
  38.  
  39.    public final int getBlueMask() {
  40.       return this.blue_mask;
  41.    }
  42.  
  43.    public final int getAlphaMask() {
  44.       return this.alpha_mask;
  45.    }
  46.  
  47.    private void DecomposeMask(int var1, String var2, int[] var3) {
  48.       if ((var1 & this.accum_mask) != 0) {
  49.          throw new IllegalArgumentException(var2 + " mask bits not unique");
  50.       } else {
  51.          int var4 = 0;
  52.          int var5 = 0;
  53.          if (var1 != 0) {
  54.             while((var1 & 1) == 0) {
  55.                var1 >>>= 1;
  56.                ++var4;
  57.             }
  58.  
  59.             while((var1 & 1) == 1) {
  60.                var1 >>>= 1;
  61.                ++var5;
  62.             }
  63.          }
  64.  
  65.          if (var1 != 0) {
  66.             throw new IllegalArgumentException(var2 + " mask bits not contiguous");
  67.          } else if (var4 + var5 > super.pixel_bits) {
  68.             throw new IllegalArgumentException(var2 + " mask overflows pixel");
  69.          } else {
  70.             int var6;
  71.             if (var5 < 8) {
  72.                var6 = (1 << var5) - 1;
  73.             } else {
  74.                var6 = 0;
  75.                if (var5 > 8) {
  76.                   var4 += var5 - 8;
  77.                }
  78.             }
  79.  
  80.             var3[0] = var4;
  81.             var3[1] = var6;
  82.          }
  83.       }
  84.    }
  85.  
  86.    private void CalculateOffsets() {
  87.       int[] var1 = new int[2];
  88.       this.DecomposeMask(this.red_mask, "red", var1);
  89.       this.red_offset = var1[0];
  90.       this.red_scale = var1[1];
  91.       this.DecomposeMask(this.green_mask, "green", var1);
  92.       this.green_offset = var1[0];
  93.       this.green_scale = var1[1];
  94.       this.DecomposeMask(this.blue_mask, "blue", var1);
  95.       this.blue_offset = var1[0];
  96.       this.blue_scale = var1[1];
  97.       this.DecomposeMask(this.alpha_mask, "alpha", var1);
  98.       this.alpha_offset = var1[0];
  99.       this.alpha_scale = var1[1];
  100.    }
  101.  
  102.    public final int getRed(int var1) {
  103.       int var2 = (var1 & this.red_mask) >>> this.red_offset;
  104.       if (this.red_scale != 0) {
  105.          var2 = var2 * 255 / this.red_scale;
  106.       }
  107.  
  108.       return var2;
  109.    }
  110.  
  111.    public final int getGreen(int var1) {
  112.       int var2 = (var1 & this.green_mask) >>> this.green_offset;
  113.       if (this.green_scale != 0) {
  114.          var2 = var2 * 255 / this.green_scale;
  115.       }
  116.  
  117.       return var2;
  118.    }
  119.  
  120.    public final int getBlue(int var1) {
  121.       int var2 = (var1 & this.blue_mask) >>> this.blue_offset;
  122.       if (this.blue_scale != 0) {
  123.          var2 = var2 * 255 / this.blue_scale;
  124.       }
  125.  
  126.       return var2;
  127.    }
  128.  
  129.    public final int getAlpha(int var1) {
  130.       if (this.alpha_mask == 0) {
  131.          return 255;
  132.       } else {
  133.          int var2 = (var1 & this.alpha_mask) >>> this.alpha_offset;
  134.          if (this.alpha_scale != 0) {
  135.             var2 = var2 * 255 / this.alpha_scale;
  136.          }
  137.  
  138.          return var2;
  139.       }
  140.    }
  141.  
  142.    public final int getRGB(int var1) {
  143.       return this.getAlpha(var1) << 24 | this.getRed(var1) << 16 | this.getGreen(var1) << 8 | this.getBlue(var1);
  144.    }
  145. }
  146.