< prev index next >

src/java.desktop/share/classes/sun/awt/image/BufImgSurfaceData.java

Print this page

        

*** 48,57 **** --- 48,59 ---- public class BufImgSurfaceData extends SurfaceData { BufferedImage bufImg; private BufferedImageGraphicsConfig graphicsConfig; RenderLoops solidloops; + private final double scaleX; + private final double scaleY; private static native void initIDs(Class<?> ICM, Class<?> ICMColorData); private static final int DCM_RGBX_RED_MASK = 0xff000000; private static final int DCM_RGBX_GREEN_MASK = 0x00ff0000;
*** 71,114 **** static { initIDs(IndexColorModel.class, ICMColorData.class); } public static SurfaceData createData(BufferedImage bufImg) { if (bufImg == null) { throw new NullPointerException("BufferedImage cannot be null"); } SurfaceData sData; ColorModel cm = bufImg.getColorModel(); int type = bufImg.getType(); // REMIND: Check the image type and pick an appropriate subclass switch (type) { case BufferedImage.TYPE_INT_BGR: ! sData = createDataIC(bufImg, SurfaceType.IntBgr); break; case BufferedImage.TYPE_INT_RGB: ! sData = createDataIC(bufImg, SurfaceType.IntRgb); break; case BufferedImage.TYPE_INT_ARGB: ! sData = createDataIC(bufImg, SurfaceType.IntArgb); break; case BufferedImage.TYPE_INT_ARGB_PRE: ! sData = createDataIC(bufImg, SurfaceType.IntArgbPre); break; case BufferedImage.TYPE_3BYTE_BGR: ! sData = createDataBC(bufImg, SurfaceType.ThreeByteBgr, 2); break; case BufferedImage.TYPE_4BYTE_ABGR: ! sData = createDataBC(bufImg, SurfaceType.FourByteAbgr, 3); break; case BufferedImage.TYPE_4BYTE_ABGR_PRE: ! sData = createDataBC(bufImg, SurfaceType.FourByteAbgrPre, 3); break; case BufferedImage.TYPE_USHORT_565_RGB: ! sData = createDataSC(bufImg, SurfaceType.Ushort565Rgb, null); break; case BufferedImage.TYPE_USHORT_555_RGB: ! sData = createDataSC(bufImg, SurfaceType.Ushort555Rgb, null); break; case BufferedImage.TYPE_BYTE_INDEXED: { SurfaceType sType; switch (cm.getTransparency()) { --- 73,127 ---- static { initIDs(IndexColorModel.class, ICMColorData.class); } public static SurfaceData createData(BufferedImage bufImg) { + return createData(bufImg, 1, 1); + } + + public static SurfaceData createData(BufferedImage bufImg, + double scaleX, double scaleY) + { if (bufImg == null) { throw new NullPointerException("BufferedImage cannot be null"); } SurfaceData sData; ColorModel cm = bufImg.getColorModel(); int type = bufImg.getType(); // REMIND: Check the image type and pick an appropriate subclass switch (type) { case BufferedImage.TYPE_INT_BGR: ! sData = createDataIC(bufImg, SurfaceType.IntBgr, scaleX, scaleY); break; case BufferedImage.TYPE_INT_RGB: ! sData = createDataIC(bufImg, SurfaceType.IntRgb, scaleX, scaleY); break; case BufferedImage.TYPE_INT_ARGB: ! sData = createDataIC(bufImg, SurfaceType.IntArgb, scaleX, scaleY); break; case BufferedImage.TYPE_INT_ARGB_PRE: ! sData = createDataIC(bufImg, SurfaceType.IntArgbPre, scaleX, scaleY); break; case BufferedImage.TYPE_3BYTE_BGR: ! sData = createDataBC(bufImg, SurfaceType.ThreeByteBgr, 2, ! scaleX, scaleY); break; case BufferedImage.TYPE_4BYTE_ABGR: ! sData = createDataBC(bufImg, SurfaceType.FourByteAbgr, 3, ! scaleX, scaleY); break; case BufferedImage.TYPE_4BYTE_ABGR_PRE: ! sData = createDataBC(bufImg, SurfaceType.FourByteAbgrPre, 3, ! scaleX, scaleY); break; case BufferedImage.TYPE_USHORT_565_RGB: ! sData = createDataSC(bufImg, SurfaceType.Ushort565Rgb, null, ! scaleX, scaleY); break; case BufferedImage.TYPE_USHORT_555_RGB: ! sData = createDataSC(bufImg, SurfaceType.Ushort555Rgb, null, ! scaleX, scaleY); break; case BufferedImage.TYPE_BYTE_INDEXED: { SurfaceType sType; switch (cm.getTransparency()) {
*** 126,143 **** sType = SurfaceType.ByteIndexed; break; default: throw new InternalError("Unrecognized transparency"); } ! sData = createDataBC(bufImg, sType, 0); } break; case BufferedImage.TYPE_BYTE_GRAY: ! sData = createDataBC(bufImg, SurfaceType.ByteGray, 0); break; case BufferedImage.TYPE_USHORT_GRAY: ! sData = createDataSC(bufImg, SurfaceType.UshortGray, null); break; case BufferedImage.TYPE_BYTE_BINARY: { SurfaceType sType; SampleModel sm = bufImg.getRaster().getSampleModel(); --- 139,158 ---- sType = SurfaceType.ByteIndexed; break; default: throw new InternalError("Unrecognized transparency"); } ! sData = createDataBC(bufImg, sType, 0, scaleX, scaleY); } break; case BufferedImage.TYPE_BYTE_GRAY: ! sData = createDataBC(bufImg, SurfaceType.ByteGray, 0, ! scaleX, scaleY); break; case BufferedImage.TYPE_USHORT_GRAY: ! sData = createDataSC(bufImg, SurfaceType.UshortGray, null, ! scaleX, scaleY); break; case BufferedImage.TYPE_BYTE_BINARY: { SurfaceType sType; SampleModel sm = bufImg.getRaster().getSampleModel();
*** 152,162 **** sType = SurfaceType.ByteBinary4Bit; break; default: throw new InternalError("Unrecognized pixel size"); } ! sData = createDataBP(bufImg, sType); } break; case BufferedImage.TYPE_CUSTOM: default: { --- 167,177 ---- sType = SurfaceType.ByteBinary4Bit; break; default: throw new InternalError("Unrecognized pixel size"); } ! sData = createDataBP(bufImg, sType, scaleX, scaleY); } break; case BufferedImage.TYPE_CUSTOM: default: {
*** 189,199 **** sType = SurfaceType.IntArgbBm; } else { sType = SurfaceType.AnyDcm; } } ! sData = createDataIC(bufImg, sType); break; } else if (raster instanceof ShortComponentRaster && raster.getNumDataElements() == 1 && ((ShortComponentRaster)raster).getPixelStride() == 1) { --- 204,214 ---- sType = SurfaceType.IntArgbBm; } else { sType = SurfaceType.AnyDcm; } } ! sData = createDataIC(bufImg, sType, scaleX, scaleY); break; } else if (raster instanceof ShortComponentRaster && raster.getNumDataElements() == 1 && ((ShortComponentRaster)raster).getPixelStride() == 1) {
*** 231,245 **** } } else { icm = null; } } ! sData = createDataSC(bufImg, sType, icm); break; } ! sData = new BufImgSurfaceData(raster.getDataBuffer(), ! bufImg, SurfaceType.Custom); } break; } ((BufImgSurfaceData) sData).initSolidLoops(); return sData; --- 246,261 ---- } } else { icm = null; } } ! sData = createDataSC(bufImg, sType, icm, scaleX, scaleY); break; } ! sData = new BufImgSurfaceData(raster.getDataBuffer(), bufImg, ! SurfaceType.Custom, ! scaleX, scaleY); } break; } ((BufImgSurfaceData) sData).initSolidLoops(); return sData;
*** 248,262 **** public static SurfaceData createData(Raster ras, ColorModel cm) { throw new InternalError("SurfaceData not implemented for Raster/CM"); } public static SurfaceData createDataIC(BufferedImage bImg, ! SurfaceType sType) { IntegerComponentRaster icRaster = (IntegerComponentRaster)bImg.getRaster(); BufImgSurfaceData bisd = ! new BufImgSurfaceData(icRaster.getDataBuffer(), bImg, sType); bisd.initRaster(icRaster.getDataStorage(), icRaster.getDataOffset(0) * 4, 0, icRaster.getWidth(), icRaster.getHeight(), icRaster.getPixelStride() * 4, --- 264,282 ---- public static SurfaceData createData(Raster ras, ColorModel cm) { throw new InternalError("SurfaceData not implemented for Raster/CM"); } public static SurfaceData createDataIC(BufferedImage bImg, ! SurfaceType sType, ! double scaleX, ! double scaleY) ! { IntegerComponentRaster icRaster = (IntegerComponentRaster)bImg.getRaster(); BufImgSurfaceData bisd = ! new BufImgSurfaceData(icRaster.getDataBuffer(), bImg, sType, ! scaleX, scaleY); bisd.initRaster(icRaster.getDataStorage(), icRaster.getDataOffset(0) * 4, 0, icRaster.getWidth(), icRaster.getHeight(), icRaster.getPixelStride() * 4,
*** 265,279 **** return bisd; } public static SurfaceData createDataSC(BufferedImage bImg, SurfaceType sType, ! IndexColorModel icm) { ShortComponentRaster scRaster = (ShortComponentRaster)bImg.getRaster(); BufImgSurfaceData bisd = ! new BufImgSurfaceData(scRaster.getDataBuffer(), bImg, sType); bisd.initRaster(scRaster.getDataStorage(), scRaster.getDataOffset(0) * 2, 0, scRaster.getWidth(), scRaster.getHeight(), scRaster.getPixelStride() * 2, --- 285,302 ---- return bisd; } public static SurfaceData createDataSC(BufferedImage bImg, SurfaceType sType, ! IndexColorModel icm, ! double scaleX, double scaleY) ! { ShortComponentRaster scRaster = (ShortComponentRaster)bImg.getRaster(); BufImgSurfaceData bisd = ! new BufImgSurfaceData(scRaster.getDataBuffer(), bImg, sType, ! scaleX, scaleY); bisd.initRaster(scRaster.getDataStorage(), scRaster.getDataOffset(0) * 2, 0, scRaster.getWidth(), scRaster.getHeight(), scRaster.getPixelStride() * 2,
*** 282,296 **** return bisd; } public static SurfaceData createDataBC(BufferedImage bImg, SurfaceType sType, ! int primaryBank) { ByteComponentRaster bcRaster = (ByteComponentRaster)bImg.getRaster(); BufImgSurfaceData bisd = ! new BufImgSurfaceData(bcRaster.getDataBuffer(), bImg, sType); ColorModel cm = bImg.getColorModel(); IndexColorModel icm = ((cm instanceof IndexColorModel) ? (IndexColorModel) cm : null); bisd.initRaster(bcRaster.getDataStorage(), --- 305,322 ---- return bisd; } public static SurfaceData createDataBC(BufferedImage bImg, SurfaceType sType, ! int primaryBank, ! double scaleX, double scaleY) ! { ByteComponentRaster bcRaster = (ByteComponentRaster)bImg.getRaster(); BufImgSurfaceData bisd = ! new BufImgSurfaceData(bcRaster.getDataBuffer(), bImg, sType, ! scaleX, scaleY); ColorModel cm = bImg.getColorModel(); IndexColorModel icm = ((cm instanceof IndexColorModel) ? (IndexColorModel) cm : null); bisd.initRaster(bcRaster.getDataStorage(),
*** 302,316 **** icm); return bisd; } public static SurfaceData createDataBP(BufferedImage bImg, ! SurfaceType sType) { BytePackedRaster bpRaster = (BytePackedRaster)bImg.getRaster(); BufImgSurfaceData bisd = ! new BufImgSurfaceData(bpRaster.getDataBuffer(), bImg, sType); ColorModel cm = bImg.getColorModel(); IndexColorModel icm = ((cm instanceof IndexColorModel) ? (IndexColorModel) cm : null); bisd.initRaster(bpRaster.getDataStorage(), --- 328,345 ---- icm); return bisd; } public static SurfaceData createDataBP(BufferedImage bImg, ! SurfaceType sType, ! double scaleX, double scaleY) ! { BytePackedRaster bpRaster = (BytePackedRaster)bImg.getRaster(); BufImgSurfaceData bisd = ! new BufImgSurfaceData(bpRaster.getDataBuffer(), bImg, sType, ! scaleX, scaleY); ColorModel cm = bImg.getColorModel(); IndexColorModel icm = ((cm instanceof IndexColorModel) ? (IndexColorModel) cm : null); bisd.initRaster(bpRaster.getDataStorage(),
*** 348,366 **** int pixStr, int scanStr, IndexColorModel icm); public BufImgSurfaceData(DataBuffer db, ! BufferedImage bufImg, SurfaceType sType) { super(SunWritableRaster.stealTrackable(db), sType, bufImg.getColorModel()); this.bufImg = bufImg; } protected BufImgSurfaceData(SurfaceType surfaceType, ColorModel cm) { super(surfaceType, cm); } public void initSolidLoops() { this.solidloops = getSolidLoops(getSurfaceType()); } --- 377,402 ---- int pixStr, int scanStr, IndexColorModel icm); public BufImgSurfaceData(DataBuffer db, ! BufferedImage bufImg, ! SurfaceType sType, ! double scaleX, ! double scaleY) { super(SunWritableRaster.stealTrackable(db), sType, bufImg.getColorModel()); this.bufImg = bufImg; + this.scaleX = scaleX; + this.scaleY = scaleY; } protected BufImgSurfaceData(SurfaceType surfaceType, ColorModel cm) { super(surfaceType, cm); + this.scaleX = 1; + this.scaleY = 1; } public void initSolidLoops() { this.solidloops = getSolidLoops(getSurfaceType()); }
*** 393,403 **** return restoreContents(bufImg); } public synchronized GraphicsConfiguration getDeviceConfiguration() { if (graphicsConfig == null) { ! graphicsConfig = BufferedImageGraphicsConfig.getConfig(bufImg); } return graphicsConfig; } public java.awt.Rectangle getBounds() { --- 429,440 ---- return restoreContents(bufImg); } public synchronized GraphicsConfiguration getDeviceConfiguration() { if (graphicsConfig == null) { ! graphicsConfig = BufferedImageGraphicsConfig ! .getConfig(bufImg, scaleX, scaleY); } return graphicsConfig; } public java.awt.Rectangle getBounds() {
*** 416,425 **** --- 453,472 ---- */ public Object getDestination() { return bufImg; } + @Override + public double getDefaultScaleX() { + return scaleX; + } + + @Override + public double getDefaultScaleY() { + return scaleY; + } + public static final class ICMColorData { private long pData = 0L; private ICMColorData(long pData) { this.pData = pData;
< prev index next >