< 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 >