home *** CD-ROM | disk | FTP | other *** search
Wrap
package sun.awt.image; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.DataBufferInt; import java.awt.image.DirectColorModel; import java.awt.image.ImageConsumer; import java.awt.image.ImageObserver; import java.awt.image.IndexColorModel; import java.awt.image.Raster; import java.awt.image.WritableRaster; import java.util.Hashtable; public class ImageRepresentation extends ImageWatched implements ImageConsumer { InputStreamImageSource src; Image image; int tag; long pData; int width = -1; int height = -1; int hints; int availinfo; Rectangle newbits; BufferedImage bimage; WritableRaster biRaster; ColorModel cmodel; ColorModel srcModel = null; int[] srcLUT = null; int srcLUTtransIndex = -1; int numSrcLUT = 0; boolean forceCMhint; int sstride; boolean isDefaultBI = false; boolean isSameCM = false; static boolean s_useNative; private boolean consuming = false; private int numWaiters; private static native void initIDs(); public ImageRepresentation(Image var1, ColorModel var2, boolean var3) { this.image = var1; if (this.image.getSource() instanceof InputStreamImageSource) { this.src = (InputStreamImageSource)this.image.getSource(); } this.setColorModel(var2); this.forceCMhint = var3; } public synchronized void reconstruct(int var1) { if (this.src != null) { this.src.checkSecurity((Object)null, false); } int var2 = var1 & ~this.availinfo; if ((this.availinfo & 64) == 0 && var2 != 0) { ++this.numWaiters; try { this.startProduction(); for(int var10 = var1 & ~this.availinfo; (this.availinfo & 64) == 0 && var10 != 0; var10 = var1 & ~this.availinfo) { try { this.wait(); } catch (InterruptedException var8) { Thread.currentThread().interrupt(); return; } } } finally { this.decrementWaiters(); } } } public void setDimensions(int var1, int var2) { if (this.src != null) { this.src.checkSecurity((Object)null, false); } this.image.setDimensions(var1, var2); ((ImageWatched)this).newInfo(this.image, 3, 0, 0, var1, var2); if (var1 > 0 && var2 > 0) { this.width = var1; this.height = var2; this.availinfo |= 3; if (this.bimage == null && this.cmodel != null) { this.createBufferedImage(); } } else { this.imageComplete(1); } } public int getWidth() { return this.width; } public int getHeight() { return this.height; } ColorModel getColorModel() { return this.cmodel; } BufferedImage getBufferedImage() { return this.bimage; } public void setProperties(Hashtable var1) { if (this.src != null) { this.src.checkSecurity((Object)null, false); } this.image.setProperties(var1); ((ImageWatched)this).newInfo(this.image, 4, 0, 0, 0, 0); } public void setColorModel(ColorModel var1) { if (this.src != null) { this.src.checkSecurity((Object)null, false); } this.srcModel = var1; if (var1 instanceof IndexColorModel) { if (var1.getTransparency() == 3) { this.cmodel = ColorModel.getRGBdefault(); this.srcLUT = null; } else { IndexColorModel var2 = (IndexColorModel)var1; this.numSrcLUT = var2.getMapSize(); this.srcLUT = new int[Math.max(this.numSrcLUT, 256)]; var2.getRGBs(this.srcLUT); this.srcLUTtransIndex = var2.getTransparentPixel(); this.cmodel = var1; } } else if (this.cmodel == null) { this.cmodel = var1; this.srcLUT = null; } else if (var1 instanceof DirectColorModel) { DirectColorModel var3 = (DirectColorModel)var1; if (var3.getRedMask() == 16711680 && var3.getGreenMask() == 65280 && var3.getBlueMask() == 255) { this.cmodel = var1; this.srcLUT = null; } } this.isSameCM = this.cmodel == var1; if ((this.availinfo & 3) != 0) { this.createBufferedImage(); } } void createBufferedImage() { this.isDefaultBI = false; try { this.biRaster = this.cmodel.createCompatibleWritableRaster(this.width, this.height); this.bimage = new BufferedImage(this.cmodel, this.biRaster, this.cmodel.isAlphaPremultiplied(), (Hashtable)null); } catch (Exception var3) { this.cmodel = ColorModel.getRGBdefault(); this.biRaster = this.cmodel.createCompatibleWritableRaster(this.width, this.height); this.bimage = new BufferedImage(this.cmodel, this.biRaster, false, (Hashtable)null); } int var1 = this.bimage.getType(); if (this.cmodel != ColorModel.getRGBdefault() && var1 != 1 && var1 != 3) { if (this.cmodel instanceof DirectColorModel) { DirectColorModel var2 = (DirectColorModel)this.cmodel; if (var2.getRedMask() == 16711680 && var2.getGreenMask() == 65280 && var2.getBlueMask() == 255) { this.isDefaultBI = true; } } } else { this.isDefaultBI = true; } } private void convertToRGB() { int var1 = this.bimage.getWidth(); int var2 = this.bimage.getHeight(); int var3 = var1 * var2; int[] var4 = new int[var3]; if (this.cmodel instanceof IndexColorModel && this.biRaster instanceof ByteComponentRaster && this.biRaster.getNumDataElements() == 1) { ByteComponentRaster var9 = (ByteComponentRaster)this.biRaster; byte[] var11 = var9.getDataStorage(); int var13 = var9.getDataOffset(0); for(int var14 = 0; var14 < var3; ++var14) { var4[var14] = this.srcLUT[var11[var13 + var14] & 255]; } } else { Object var5 = null; int var6 = 0; for(int var7 = 0; var7 < var2; ++var7) { for(int var8 = 0; var8 < var1; ++var8) { var5 = this.biRaster.getDataElements(var8, var7, var5); var4[var6++] = this.cmodel.getRGB(var5); } } } this.isSameCM = false; this.cmodel = ColorModel.getRGBdefault(); DataBufferInt var10 = new DataBufferInt(var4, var4.length); int[] var12 = new int[]{16711680, 65280, 255, -16777216}; this.biRaster = Raster.createPackedRaster(var10, var1, var2, var1, var12, (Point)null); this.bimage = new BufferedImage(this.cmodel, this.biRaster, this.cmodel.isAlphaPremultiplied(), (Hashtable)null); this.srcLUT = null; this.isDefaultBI = true; } public void setHints(int var1) { if (this.src != null) { this.src.checkSecurity((Object)null, false); } this.hints = var1; } public native void setICMpixels(int var1, int var2, int var3, int var4, int[] var5, byte[] var6, int var7, int var8, IntegerComponentRaster var9); public native void setBytePixels(int var1, int var2, int var3, int var4, byte[] var5, int var6, int var7, ByteComponentRaster var8, int var9); public native int setDiffICM(int var1, int var2, int var3, int var4, int[] var5, int var6, int var7, IndexColorModel var8, byte[] var9, int var10, int var11, ByteComponentRaster var12, int var13); public void setPixels(int var1, int var2, int var3, int var4, ColorModel var5, byte[] var6, int var7, int var8) { int var9 = var7; Object var11 = null; if (this.src != null) { this.src.checkSecurity((Object)null, false); } synchronized(this) { if (this.bimage == null) { if (this.cmodel == null) { this.cmodel = var5; } this.createBufferedImage(); } else if (this.isSameCM && this.cmodel != var5 && this.srcLUT != null && var5 instanceof IndexColorModel && this.biRaster instanceof ByteComponentRaster) { IndexColorModel var13 = (IndexColorModel)var5; ByteComponentRaster var14 = (ByteComponentRaster)this.biRaster; int var15 = this.numSrcLUT; if (this.setDiffICM(var1, var2, var3, var4, this.srcLUT, this.srcLUTtransIndex, this.numSrcLUT, var13, var6, var7, var8, var14, var14.getDataOffset(0)) != 0) { if (var15 != this.numSrcLUT) { boolean var34 = ((ColorModel)var13).hasAlpha(); if (this.srcLUTtransIndex != -1) { var34 = true; } int var36 = ((ColorModel)var13).getPixelSize(); var13 = new IndexColorModel(var36, this.numSrcLUT, this.srcLUT, 0, var34, this.srcLUTtransIndex, var36 > 8 ? 1 : 0); this.cmodel = var13; this.bimage = new BufferedImage(var13, var14, false, (Hashtable)null); } return; } this.convertToRGB(); } if (this.isDefaultBI) { IntegerComponentRaster var29 = (IntegerComponentRaster)this.biRaster; if (this.srcLUT != null && var5 instanceof IndexColorModel) { if (var5 != this.srcModel) { ((IndexColorModel)var5).getRGBs(this.srcLUT); this.srcModel = var5; } if (s_useNative) { this.setICMpixels(var1, var2, var3, var4, this.srcLUT, var6, var7, var8, var29); } else { int[] var32 = new int[var3 * var4]; int var33 = 0; for(int var35 = 0; var35 < var4; var9 += var8) { int var23 = var9; for(int var18 = 0; var18 < var3; ++var18) { var32[var33++] = this.srcLUT[var6[var23++] & 255]; } ++var35; } var29.setDataElements(var1, var2, var3, var4, var32); } } else { int[] var31 = new int[var3]; for(int var16 = var2; var16 < var2 + var4; var9 += var8) { int var22 = var9; for(int var17 = 0; var17 < var3; ++var17) { var31[var17] = var5.getRGB(var6[var22++] & 255); } var29.setDataElements(var1, var16, var3, 1, var31); ++var16; } this.availinfo |= 8; } } else if (this.cmodel == var5 && this.biRaster instanceof ByteComponentRaster && this.biRaster.getNumDataElements() == 1) { ByteComponentRaster var25 = (ByteComponentRaster)this.biRaster; if (var3 * var4 > 200) { if (var8 == var3) { var25.putByteData(var1, var2, var3, var4, var6); } else { byte[] var28 = new byte[var3]; int var21 = var7; for(int var30 = var2; var30 < var2 + var4; ++var30) { System.arraycopy(var6, var21, var28, 0, var3); var25.putByteData(var1, var30, var3, 1, var28); var21 += var8; } } } else { this.setBytePixels(var1, var2, var3, var4, var6, var7, var8, var25, var25.getDataOffset(0)); } } else { for(int var24 = var2; var24 < var2 + var4; var9 += var8) { int var10 = var9; for(int var27 = var1; var27 < var1 + var3; ++var27) { this.bimage.setRGB(var27, var24, var5.getRGB(var6[var10++] & 255)); } ++var24; } this.availinfo |= 8; } } if ((this.availinfo & 16) == 0) { ((ImageWatched)this).newInfo(this.image, 8, var1, var2, var3, var4); } } public void setPixels(int var1, int var2, int var3, int var4, ColorModel var5, int[] var6, int var7, int var8) { int var9 = var7; if (this.src != null) { this.src.checkSecurity((Object)null, false); } synchronized(this) { if (this.bimage == null) { if (this.cmodel == null) { this.cmodel = var5; } this.createBufferedImage(); } int[] var12 = new int[var3]; if (this.cmodel instanceof IndexColorModel) { this.convertToRGB(); } if (var5 == this.cmodel && this.biRaster instanceof IntegerComponentRaster) { IntegerComponentRaster var26 = (IntegerComponentRaster)this.biRaster; if (var7 == 0 && var8 == var3) { var26.setDataElements(var1, var2, var3, var4, var6); } else { for(int var24 = var2; var24 < var2 + var4; var9 += var8) { System.arraycopy(var6, var9, var12, 0, var3); var26.setDataElements(var1, var24, var3, 1, var12); ++var24; } } } else { if (var5.getTransparency() != 1 && this.cmodel.getTransparency() == 1) { this.convertToRGB(); } if (this.isDefaultBI) { IntegerComponentRaster var25 = (IntegerComponentRaster)this.biRaster; int[] var27 = var25.getDataStorage(); if (this.cmodel.equals(var5)) { int var17 = var25.getScanlineStride(); int var18 = var2 * var17 + var1; for(int var22 = 0; var22 < var4; var9 += var8) { System.arraycopy(var6, var9, var27, var18, var3); var18 += var17; ++var22; } } else { for(int var23 = var2; var23 < var2 + var4; var9 += var8) { int var21 = var9; for(int var28 = 0; var28 < var3; ++var28) { var12[var28] = var5.getRGB(var6[var21++]); } var25.setDataElements(var1, var23, var3, 1, var12); ++var23; } } this.availinfo |= 8; } else { Object var15 = null; for(int var13 = var2; var13 < var2 + var4; var9 += var8) { int var10 = var9; for(int var16 = var1; var16 < var1 + var3; ++var16) { int var14 = var5.getRGB(var6[var10++]); var15 = this.cmodel.getDataElements(var14, var15); this.biRaster.setDataElements(var16, var13, var15); } ++var13; } this.availinfo |= 8; } } } if ((this.availinfo & 16) == 0) { ((ImageWatched)this).newInfo(this.image, 8, var1, var2, var3, var4); } } public BufferedImage getOpaqueRGBImage() { if (this.bimage.getType() != 2) { return this.bimage; } else { int var1 = this.bimage.getWidth(); int var2 = this.bimage.getHeight(); int var3 = var1 * var2; DataBufferInt var4 = (DataBufferInt)this.biRaster.getDataBuffer(); int[] var5 = var4.getData(); for(int var6 = 0; var6 < var3; ++var6) { if (var5[var6] >>> 24 != 255) { return this.bimage; } } DirectColorModel var7 = new DirectColorModel(24, 16711680, 65280, 255); int[] var8 = new int[]{16711680, 65280, 255}; WritableRaster var9 = Raster.createPackedRaster(var4, var1, var2, var1, var8, (Point)null); try { BufferedImage var10 = new BufferedImage(var7, var9, false, (Hashtable)null); return var10; } catch (Exception var11) { return this.bimage; } } } public void imageComplete(int var1) { if (this.src != null) { this.src.checkSecurity((Object)null, false); } boolean var2; short var3; switch (var1) { case 1: this.image.addInfo(64); var2 = true; var3 = 64; this.dispose(); break; case 2: var2 = false; var3 = 16; break; case 3: var2 = true; var3 = 32; break; case 4: default: var2 = true; var3 = 128; } synchronized(this) { if (var2) { this.image.getSource().removeConsumer(this); this.consuming = false; this.newbits = null; if (this.bimage != null) { this.bimage = this.getOpaqueRGBImage(); } } this.availinfo |= var3; this.notifyAll(); } ((ImageWatched)this).newInfo(this.image, var3, 0, 0, this.width, this.height); this.image.infoDone(var1); } void startProduction() { if (!this.consuming) { this.consuming = true; this.image.getSource().startProduction(this); } } private synchronized void checkConsumption() { if (super.watchers == null && this.numWaiters == 0 && (this.availinfo & 32) == 0) { this.dispose(); } } public synchronized void removeWatcher(ImageObserver var1) { super.removeWatcher(var1); this.checkConsumption(); } private synchronized void decrementWaiters() { --this.numWaiters; this.checkConsumption(); } public boolean prepare(ImageObserver var1) { if (this.src != null) { this.src.checkSecurity((Object)null, false); } if ((this.availinfo & 64) != 0) { if (var1 != null) { var1.imageUpdate(this.image, 192, -1, -1, -1, -1); } return false; } else { boolean var2 = (this.availinfo & 32) != 0; if (!var2) { ((ImageWatched)this).addWatcher(var1); this.startProduction(); var2 = (this.availinfo & 32) != 0; } return var2; } } public int check(ImageObserver var1) { if (this.src != null) { this.src.checkSecurity((Object)null, false); } if ((this.availinfo & 96) == 0) { ((ImageWatched)this).addWatcher(var1); } return this.availinfo; } public boolean drawToBufImage(Graphics var1, Image var2, int var3, int var4, Color var5, ImageObserver var6) { if (this.src != null) { this.src.checkSecurity((Object)null, false); } if ((this.availinfo & 64) != 0) { if (var6 != null) { var6.imageUpdate(this.image, 192, -1, -1, -1, -1); } return false; } else { boolean var7 = (this.availinfo & 32) != 0; boolean var8 = (this.availinfo & 128) != 0; if (!var7 && !var8) { ((ImageWatched)this).addWatcher(var6); this.startProduction(); var7 = (this.availinfo & 32) != 0; } if (var7 || 0 != (this.availinfo & 16)) { var1.drawImage(this.bimage, var3, var4, var5, (ImageObserver)null); } return var7; } } public boolean drawToBufImage(Graphics var1, Image var2, int var3, int var4, int var5, int var6, Color var7, ImageObserver var8) { if (this.src != null) { this.src.checkSecurity((Object)null, false); } if ((this.availinfo & 64) != 0) { if (var8 != null) { var8.imageUpdate(this.image, 192, -1, -1, -1, -1); } return false; } else { boolean var9 = (this.availinfo & 32) != 0; boolean var10 = (this.availinfo & 128) != 0; if (!var9 && !var10) { ((ImageWatched)this).addWatcher(var8); this.startProduction(); var9 = (this.availinfo & 32) != 0; } if (var9 || 0 != (this.availinfo & 16)) { var1.drawImage(this.bimage, var3, var4, var5, var6, var7, (ImageObserver)null); } return var9; } } public boolean drawToBufImage(Graphics var1, Image var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, Color var11, ImageObserver var12) { if (this.src != null) { this.src.checkSecurity((Object)null, false); } if ((this.availinfo & 64) != 0) { if (var12 != null) { var12.imageUpdate(this.image, 192, -1, -1, -1, -1); } return false; } else { boolean var13 = (this.availinfo & 32) != 0; boolean var14 = (this.availinfo & 128) != 0; if (!var13 && !var14) { ((ImageWatched)this).addWatcher(var12); this.startProduction(); var13 = (this.availinfo & 32) != 0; } if (var13 || 0 != (this.availinfo & 16)) { var1.drawImage(this.bimage, var3, var4, var5, var6, var7, var8, var9, var10, var11, (ImageObserver)null); } return var13; } } public boolean drawToBufImage(Graphics var1, Image var2, AffineTransform var3, ImageObserver var4) { Graphics2D var5 = (Graphics2D)var1; if (this.src != null) { this.src.checkSecurity((Object)null, false); } if ((this.availinfo & 64) != 0) { if (var4 != null) { var4.imageUpdate(this.image, 192, -1, -1, -1, -1); } return false; } else { boolean var6 = (this.availinfo & 32) != 0; boolean var7 = (this.availinfo & 128) != 0; if (!var6 && !var7) { ((ImageWatched)this).addWatcher(var4); this.startProduction(); var6 = (this.availinfo & 32) != 0; } if (var6 || 0 != (this.availinfo & 16)) { var5.drawImage(this.bimage, var3, (ImageObserver)null); } return var6; } } synchronized void abort() { this.image.getSource().removeConsumer(this); this.consuming = false; this.newbits = null; this.bimage = null; this.biRaster = null; this.cmodel = null; this.srcLUT = null; this.isDefaultBI = false; this.isSameCM = false; ((ImageWatched)this).newInfo(this.image, 128, -1, -1, -1, -1); this.availinfo &= -121; } synchronized void dispose() { this.image.getSource().removeConsumer(this); this.consuming = false; this.newbits = null; this.availinfo &= -57; } static { NativeLibLoader.loadLibraries(); initIDs(); s_useNative = true; } }