下面列出了怎么用sun.awt.image.SunWritableRaster的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* Return a Raster containing the colors generated for the graphics
* operation.
* @param x,y,w,h The area in device space for which colors are
* generated.
*/
public Raster getRaster(int x, int y, int w, int h) {
if (outRas == null ||
outRas.getWidth() < w ||
outRas.getHeight() < h)
{
// If h==1, we will probably get lots of "scanline" rects
outRas = makeRaster((h == 1 ? Math.max(w, maxWidth) : w), h);
}
double X = mod(xOrg + x * incXAcross + y * incXDown, bWidth);
double Y = mod(yOrg + x * incYAcross + y * incYDown, bHeight);
setRaster((int) X, (int) Y, fractAsInt(X), fractAsInt(Y),
w, h, bWidth, bHeight,
colincx, colincxerr,
colincy, colincyerr,
rowincx, rowincxerr,
rowincy, rowincyerr);
SunWritableRaster.markDirty(outRas);
return outRas;
}
protected void paintToImage(Component c, Image image, Graphics g,
int w, int h, Object[] args) {
boolean accEnabled = false;
Skin skin = (Skin)args[0];
Part part = skin.part;
State state = (State)args[1];
if (state == null) {
state = skin.state;
}
if (c == null) {
c = skin.component;
}
BufferedImage bi = (BufferedImage)image;
WritableRaster raster = bi.getRaster();
DataBufferInt dbi = (DataBufferInt)raster.getDataBuffer();
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
ThemeReader.paintBackground(SunWritableRaster.stealData(dbi, 0),
part.getControlName(c), part.getValue(),
State.getValue(part, state),
0, 0, w, h, w);
SunWritableRaster.markDirty(dbi);
}
/**
* Called to indicate that painting is finished. We create a new
* BufferedImage from the offscreen buffer, (optionally) cache it,
* and paint it.
*/
public void finishPainting(boolean useCache) {
DataBufferInt dataBuffer = new DataBufferInt(w0 * h0);
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
int transparency =
nativeFinishPainting(SunWritableRaster.stealData(dataBuffer, 0),
w0, h0);
SunWritableRaster.markDirty(dataBuffer);
int[] bands = BAND_OFFSETS[transparency - 1];
WritableRaster raster = Raster.createPackedRaster(
dataBuffer, w0, h0, w0, bands, null);
ColorModel cm = COLOR_MODELS[transparency - 1];
Image img = new BufferedImage(cm, raster, false, null);
if (useCache) {
cache.setImage(getClass(), null, w0, h0, cacheArgs, img);
}
graphics.drawImage(img, x0, y0, null);
}
protected void paintToImage(Component c, Image image, Graphics g,
int w, int h, Object[] args) {
boolean accEnabled = false;
Skin skin = (Skin)args[0];
Part part = skin.part;
State state = (State)args[1];
if (state == null) {
state = skin.state;
}
if (c == null) {
c = skin.component;
}
BufferedImage bi = (BufferedImage)image;
WritableRaster raster = bi.getRaster();
DataBufferInt dbi = (DataBufferInt)raster.getDataBuffer();
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
ThemeReader.paintBackground(SunWritableRaster.stealData(dbi, 0),
part.getControlName(c), part.getValue(),
State.getValue(part, state),
0, 0, w, h, w);
SunWritableRaster.markDirty(dbi);
}
/**
* Return a Raster containing the colors generated for the graphics
* operation.
* @param x,y,w,h The area in device space for which colors are
* generated.
*/
public Raster getRaster(int x, int y, int w, int h) {
if (outRas == null ||
outRas.getWidth() < w ||
outRas.getHeight() < h)
{
// If h==1, we will probably get lots of "scanline" rects
outRas = makeRaster((h == 1 ? Math.max(w, maxWidth) : w), h);
}
double X = mod(xOrg + x * incXAcross + y * incXDown, bWidth);
double Y = mod(yOrg + x * incYAcross + y * incYDown, bHeight);
setRaster((int) X, (int) Y, fractAsInt(X), fractAsInt(Y),
w, h, bWidth, bHeight,
colincx, colincxerr,
colincy, colincyerr,
rowincx, rowincxerr,
rowincy, rowincyerr);
SunWritableRaster.markDirty(outRas);
return outRas;
}
protected void paintToImage(Component c, Image image, Graphics g,
int w, int h, Object[] args) {
Skin skin = (Skin)args[0];
Part part = skin.part;
State state = (State)args[1];
if (state == null) {
state = skin.state;
}
if (c == null) {
c = skin.component;
}
BufferedImage bi = (BufferedImage)image;
w = bi.getWidth();
h = bi.getHeight();
WritableRaster raster = bi.getRaster();
DataBufferInt dbi = (DataBufferInt)raster.getDataBuffer();
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
ThemeReader.paintBackground(SunWritableRaster.stealData(dbi, 0),
part.getControlName(c), part.getValue(),
State.getValue(part, state),
0, 0, w, h, w);
SunWritableRaster.markDirty(dbi);
}
/**
* Called to indicate that painting is finished. We create a new
* BufferedImage from the offscreen buffer, (optionally) cache it,
* and paint it.
*/
public BufferedImage finishPainting(boolean useCache) {
DataBufferInt dataBuffer = new DataBufferInt(w0 * h0);
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
int transparency =
nativeFinishPainting(SunWritableRaster.stealData(dataBuffer, 0),
w0, h0);
SunWritableRaster.markDirty(dataBuffer);
int[] bands = BAND_OFFSETS[transparency - 1];
WritableRaster raster = Raster.createPackedRaster(
dataBuffer, w0, h0, w0, bands, null);
ColorModel cm = COLOR_MODELS[transparency - 1];
BufferedImage img = new BufferedImage(cm, raster, false, null);
if (useCache) {
cache.setImage(getClass(), null, w0, h0, cacheArgs, img);
}
graphics.drawImage(img, x0, y0, null);
return img;
}
protected void paintToImage(Component c, Image image, Graphics g,
int w, int h, Object[] args) {
boolean accEnabled = false;
Skin skin = (Skin)args[0];
Part part = skin.part;
State state = (State)args[1];
if (state == null) {
state = skin.state;
}
if (c == null) {
c = skin.component;
}
BufferedImage bi = (BufferedImage)image;
WritableRaster raster = bi.getRaster();
DataBufferInt dbi = (DataBufferInt)raster.getDataBuffer();
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
ThemeReader.paintBackground(SunWritableRaster.stealData(dbi, 0),
part.getControlName(c), part.getValue(),
State.getValue(part, state),
0, 0, w, h, w);
SunWritableRaster.markDirty(dbi);
}
/**
* Returns the custom buffered image, which mostly identical to
* BufferedImage.(w,h,TYPE_3BYTE_BGR), but uses the bigger scanlineStride.
* This means that the raster will have gaps, between the rows.
*/
private static BufferedImage makeCustomManagedBI() {
int w = 511, h = 255;
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
int[] nBits = {8, 8, 8};
int[] bOffs = {2, 1, 0};
ColorModel colorModel = new ComponentColorModel(cs, nBits, false, false,
Transparency.OPAQUE,
DataBuffer.TYPE_BYTE);
WritableRaster raster =
Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, w, h,
w * 3 + 2, 3, bOffs, null);
BufferedImage bi = new BufferedImage(colorModel, raster, true, null);
SunWritableRaster.makeTrackable(raster.getDataBuffer());
SunWritableRaster.markDirty(bi);
return bi;
}
/**
* Returns the custom buffered image, which mostly identical to
* BufferedImage.(w,h,TYPE_3BYTE_BGR), but uses the bigger scanlineStride.
* This means that the raster will have gaps, between the rows.
*/
private static BufferedImage makeCustomManagedBI() {
int w = 511, h = 255;
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
int[] nBits = {8, 8, 8};
int[] bOffs = {2, 1, 0};
ColorModel colorModel = new ComponentColorModel(cs, nBits, false, false,
Transparency.OPAQUE,
DataBuffer.TYPE_BYTE);
WritableRaster raster =
Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, w, h,
w * 3 + 2, 3, bOffs, null);
BufferedImage bi = new BufferedImage(colorModel, raster, true, null);
SunWritableRaster.makeTrackable(raster.getDataBuffer());
SunWritableRaster.markDirty(bi);
return bi;
}
/**
* Return a Raster containing the colors generated for the graphics
* operation.
* @param x,y,w,h The area in device space for which colors are
* generated.
*/
public Raster getRaster(int x, int y, int w, int h) {
if (outRas == null ||
outRas.getWidth() < w ||
outRas.getHeight() < h)
{
// If h==1, we will probably get lots of "scanline" rects
outRas = makeRaster((h == 1 ? Math.max(w, maxWidth) : w), h);
}
double X = mod(xOrg + x * incXAcross + y * incXDown, bWidth);
double Y = mod(yOrg + x * incYAcross + y * incYDown, bHeight);
setRaster((int) X, (int) Y, fractAsInt(X), fractAsInt(Y),
w, h, bWidth, bHeight,
colincx, colincxerr,
colincy, colincyerr,
rowincx, rowincxerr,
rowincy, rowincyerr);
SunWritableRaster.markDirty(outRas);
return outRas;
}
/**
* Called to indicate that painting is finished. We create a new
* BufferedImage from the offscreen buffer, (optionally) cache it,
* and paint it.
*/
public BufferedImage finishPainting(boolean useCache) {
DataBufferInt dataBuffer = new DataBufferInt(w0 * h0);
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
int transparency =
nativeFinishPainting(SunWritableRaster.stealData(dataBuffer, 0),
w0, h0);
SunWritableRaster.markDirty(dataBuffer);
int[] bands = BAND_OFFSETS[transparency - 1];
WritableRaster raster = Raster.createPackedRaster(
dataBuffer, w0, h0, w0, bands, null);
ColorModel cm = COLOR_MODELS[transparency - 1];
BufferedImage img = new BufferedImage(cm, raster, false, null);
if (useCache) {
cache.setImage(getClass(), null, w0, h0, cacheArgs, img);
}
graphics.drawImage(img, x0, y0, null);
return img;
}
protected void paintToImage(Component c, Image image, Graphics g,
int w, int h, Object[] args) {
boolean accEnabled = false;
Skin skin = (Skin)args[0];
Part part = skin.part;
State state = (State)args[1];
if (state == null) {
state = skin.state;
}
if (c == null) {
c = skin.component;
}
BufferedImage bi = (BufferedImage)image;
WritableRaster raster = bi.getRaster();
DataBufferInt dbi = (DataBufferInt)raster.getDataBuffer();
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
ThemeReader.paintBackground(SunWritableRaster.stealData(dbi, 0),
part.getControlName(c), part.getValue(),
State.getValue(part, state),
0, 0, w, h, w);
SunWritableRaster.markDirty(dbi);
}
/**
* Returns the custom buffered image, which mostly identical to
* BufferedImage.(w,h,TYPE_3BYTE_BGR), but uses the bigger scanlineStride.
* This means that the raster will have gaps, between the rows.
*/
private static BufferedImage makeCustomManagedBI() {
int w = 511, h = 255;
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
int[] nBits = {8, 8, 8};
int[] bOffs = {2, 1, 0};
ColorModel colorModel = new ComponentColorModel(cs, nBits, false, false,
Transparency.OPAQUE,
DataBuffer.TYPE_BYTE);
WritableRaster raster =
Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, w, h,
w * 3 + 2, 3, bOffs, null);
BufferedImage bi = new BufferedImage(colorModel, raster, true, null);
SunWritableRaster.makeTrackable(raster.getDataBuffer());
SunWritableRaster.markDirty(bi);
return bi;
}
/**
* Returns the custom buffered image, which mostly identical to
* BufferedImage.(w,h,TYPE_3BYTE_BGR), but uses the bigger scanlineStride.
* This means that the raster will have gaps, between the rows.
*/
private static BufferedImage makeCustomManagedBI() {
int w = 511, h = 255;
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
int[] nBits = {8, 8, 8};
int[] bOffs = {2, 1, 0};
ColorModel colorModel = new ComponentColorModel(cs, nBits, false, false,
Transparency.OPAQUE,
DataBuffer.TYPE_BYTE);
WritableRaster raster =
Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, w, h,
w * 3 + 2, 3, bOffs, null);
BufferedImage bi = new BufferedImage(colorModel, raster, true, null);
SunWritableRaster.makeTrackable(raster.getDataBuffer());
SunWritableRaster.markDirty(bi);
return bi;
}
/**
* Return a Raster containing the colors generated for the graphics
* operation.
* @param x,y,w,h The area in device space for which colors are
* generated.
*/
public Raster getRaster(int x, int y, int w, int h) {
if (outRas == null ||
outRas.getWidth() < w ||
outRas.getHeight() < h)
{
// If h==1, we will probably get lots of "scanline" rects
outRas = makeRaster((h == 1 ? Math.max(w, maxWidth) : w), h);
}
double X = mod(xOrg + x * incXAcross + y * incXDown, bWidth);
double Y = mod(yOrg + x * incYAcross + y * incYDown, bHeight);
setRaster((int) X, (int) Y, fractAsInt(X), fractAsInt(Y),
w, h, bWidth, bHeight,
colincx, colincxerr,
colincy, colincyerr,
rowincx, rowincxerr,
rowincy, rowincyerr);
SunWritableRaster.markDirty(outRas);
return outRas;
}
/**
* Called to indicate that painting is finished. We create a new
* BufferedImage from the offscreen buffer, (optionally) cache it,
* and paint it.
*/
public void finishPainting(boolean useCache) {
DataBufferInt dataBuffer = new DataBufferInt(w0 * h0);
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
int transparency =
nativeFinishPainting(SunWritableRaster.stealData(dataBuffer, 0),
w0, h0);
SunWritableRaster.markDirty(dataBuffer);
int[] bands = BAND_OFFSETS[transparency - 1];
WritableRaster raster = Raster.createPackedRaster(
dataBuffer, w0, h0, w0, bands, null);
ColorModel cm = COLOR_MODELS[transparency - 1];
Image img = new BufferedImage(cm, raster, false, null);
if (useCache) {
cache.setImage(getClass(), null, w0, h0, cacheArgs, img);
}
graphics.drawImage(img, x0, y0, null);
}
protected void paintToImage(Component c, Image image, Graphics g,
int w, int h, Object[] args) {
boolean accEnabled = false;
Skin skin = (Skin)args[0];
Part part = skin.part;
State state = (State)args[1];
if (state == null) {
state = skin.state;
}
if (c == null) {
c = skin.component;
}
BufferedImage bi = (BufferedImage)image;
WritableRaster raster = bi.getRaster();
DataBufferInt dbi = (DataBufferInt)raster.getDataBuffer();
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
ThemeReader.paintBackground(SunWritableRaster.stealData(dbi, 0),
part.getControlName(c), part.getValue(),
State.getValue(part, state),
0, 0, w, h, w);
SunWritableRaster.markDirty(dbi);
}
/**
* Return a Raster containing the colors generated for the graphics
* operation.
* @param x,y,w,h The area in device space for which colors are
* generated.
*/
public Raster getRaster(int x, int y, int w, int h) {
if (outRas == null ||
outRas.getWidth() < w ||
outRas.getHeight() < h)
{
// If h==1, we will probably get lots of "scanline" rects
outRas = makeRaster((h == 1 ? Math.max(w, maxWidth) : w), h);
}
double X = mod(xOrg + x * incXAcross + y * incXDown, bWidth);
double Y = mod(yOrg + x * incYAcross + y * incYDown, bHeight);
setRaster((int) X, (int) Y, fractAsInt(X), fractAsInt(Y),
w, h, bWidth, bHeight,
colincx, colincxerr,
colincy, colincyerr,
rowincx, rowincxerr,
rowincy, rowincyerr);
SunWritableRaster.markDirty(outRas);
return outRas;
}
/**
* Return a Raster containing the colors generated for the graphics
* operation.
* @param x,y,w,h The area in device space for which colors are
* generated.
*/
public Raster getRaster(int x, int y, int w, int h) {
if (outRas == null ||
outRas.getWidth() < w ||
outRas.getHeight() < h)
{
// If h==1, we will probably get lots of "scanline" rects
outRas = makeRaster((h == 1 ? Math.max(w, maxWidth) : w), h);
}
double X = mod(xOrg + x * incXAcross + y * incXDown, bWidth);
double Y = mod(yOrg + x * incYAcross + y * incYDown, bHeight);
setRaster((int) X, (int) Y, fractAsInt(X), fractAsInt(Y),
w, h, bWidth, bHeight,
colincx, colincxerr,
colincy, colincyerr,
rowincx, rowincxerr,
rowincy, rowincyerr);
SunWritableRaster.markDirty(outRas);
return outRas;
}
/**
* Called to indicate that painting is finished. We create a new
* BufferedImage from the offscreen buffer, (optionally) cache it,
* and paint it.
*/
public void finishPainting(boolean useCache) {
DataBufferInt dataBuffer = new DataBufferInt(w0 * h0);
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
int transparency =
nativeFinishPainting(SunWritableRaster.stealData(dataBuffer, 0),
w0, h0);
SunWritableRaster.markDirty(dataBuffer);
int[] bands = BAND_OFFSETS[transparency - 1];
WritableRaster raster = Raster.createPackedRaster(
dataBuffer, w0, h0, w0, bands, null);
ColorModel cm = COLOR_MODELS[transparency - 1];
Image img = new BufferedImage(cm, raster, false, null);
if (useCache) {
cache.setImage(getClass(), null, w0, h0, cacheArgs, img);
}
graphics.drawImage(img, x0, y0, null);
}
protected void paintToImage(Component c, Image image, Graphics g,
int w, int h, Object[] args) {
boolean accEnabled = false;
Skin skin = (Skin)args[0];
Part part = skin.part;
State state = (State)args[1];
if (state == null) {
state = skin.state;
}
if (c == null) {
c = skin.component;
}
BufferedImage bi = (BufferedImage)image;
WritableRaster raster = bi.getRaster();
DataBufferInt dbi = (DataBufferInt)raster.getDataBuffer();
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
ThemeReader.paintBackground(SunWritableRaster.stealData(dbi, 0),
part.getControlName(c), part.getValue(),
State.getValue(part, state),
0, 0, w, h, w);
SunWritableRaster.markDirty(dbi);
}
/**
* Return a Raster containing the colors generated for the graphics
* operation.
* @param x,y,w,h The area in device space for which colors are
* generated.
*/
public Raster getRaster(int x, int y, int w, int h) {
if (outRas == null ||
outRas.getWidth() < w ||
outRas.getHeight() < h)
{
// If h==1, we will probably get lots of "scanline" rects
outRas = makeRaster((h == 1 ? Math.max(w, maxWidth) : w), h);
}
double X = mod(xOrg + x * incXAcross + y * incXDown, bWidth);
double Y = mod(yOrg + x * incYAcross + y * incYDown, bHeight);
setRaster((int) X, (int) Y, fractAsInt(X), fractAsInt(Y),
w, h, bWidth, bHeight,
colincx, colincxerr,
colincy, colincyerr,
rowincx, rowincxerr,
rowincy, rowincyerr);
SunWritableRaster.markDirty(outRas);
return outRas;
}
/**
* Called to indicate that painting is finished. We create a new
* BufferedImage from the offscreen buffer, (optionally) cache it,
* and paint it.
*/
public void finishPainting(boolean useCache) {
DataBufferInt dataBuffer = new DataBufferInt(w0 * h0);
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
int transparency =
nativeFinishPainting(SunWritableRaster.stealData(dataBuffer, 0),
w0, h0);
SunWritableRaster.markDirty(dataBuffer);
int[] bands = BAND_OFFSETS[transparency - 1];
WritableRaster raster = Raster.createPackedRaster(
dataBuffer, w0, h0, w0, bands, null);
ColorModel cm = COLOR_MODELS[transparency - 1];
Image img = new BufferedImage(cm, raster, false, null);
if (useCache) {
cache.setImage(getClass(), null, w0, h0, cacheArgs, img);
}
graphics.drawImage(img, x0, y0, null);
}
protected void paintToImage(Component c, Image image, Graphics g,
int w, int h, Object[] args) {
boolean accEnabled = false;
Skin skin = (Skin)args[0];
Part part = skin.part;
State state = (State)args[1];
if (state == null) {
state = skin.state;
}
if (c == null) {
c = skin.component;
}
BufferedImage bi = (BufferedImage)image;
WritableRaster raster = bi.getRaster();
DataBufferInt dbi = (DataBufferInt)raster.getDataBuffer();
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
ThemeReader.paintBackground(SunWritableRaster.stealData(dbi, 0),
part.getControlName(c), part.getValue(),
State.getValue(part, state),
0, 0, w, h, w);
SunWritableRaster.markDirty(dbi);
}
/**
* Called to indicate that painting is finished. We create a new
* BufferedImage from the offscreen buffer, (optionally) cache it,
* and paint it.
*/
public void finishPainting(boolean useCache) {
DataBufferInt dataBuffer = new DataBufferInt(w0 * h0);
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
int transparency =
nativeFinishPainting(SunWritableRaster.stealData(dataBuffer, 0),
w0, h0);
SunWritableRaster.markDirty(dataBuffer);
int[] bands = BAND_OFFSETS[transparency - 1];
WritableRaster raster = Raster.createPackedRaster(
dataBuffer, w0, h0, w0, bands, null);
ColorModel cm = COLOR_MODELS[transparency - 1];
Image img = new BufferedImage(cm, raster, false, null);
if (useCache) {
cache.setImage(getClass(), null, w0, h0, cacheArgs, img);
}
graphics.drawImage(img, x0, y0, null);
}
/**
* Return a Raster containing the colors generated for the graphics
* operation.
* @param x,y,w,h The area in device space for which colors are
* generated.
*/
public Raster getRaster(int x, int y, int w, int h) {
if (outRas == null ||
outRas.getWidth() < w ||
outRas.getHeight() < h)
{
// If h==1, we will probably get lots of "scanline" rects
outRas = makeRaster((h == 1 ? Math.max(w, maxWidth) : w), h);
}
double X = mod(xOrg + x * incXAcross + y * incXDown, bWidth);
double Y = mod(yOrg + x * incYAcross + y * incYDown, bHeight);
setRaster((int) X, (int) Y, fractAsInt(X), fractAsInt(Y),
w, h, bWidth, bHeight,
colincx, colincxerr,
colincy, colincyerr,
rowincx, rowincxerr,
rowincy, rowincyerr);
SunWritableRaster.markDirty(outRas);
return outRas;
}
/**
* Called to indicate that painting is finished. We create a new
* BufferedImage from the offscreen buffer, (optionally) cache it,
* and paint it.
*/
public BufferedImage finishPainting(boolean useCache) {
DataBufferInt dataBuffer = new DataBufferInt(w0 * h0);
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
int transparency =
nativeFinishPainting(SunWritableRaster.stealData(dataBuffer, 0),
w0, h0);
SunWritableRaster.markDirty(dataBuffer);
int[] bands = BAND_OFFSETS[transparency - 1];
WritableRaster raster = Raster.createPackedRaster(
dataBuffer, w0, h0, w0, bands, null);
ColorModel cm = COLOR_MODELS[transparency - 1];
BufferedImage img = new BufferedImage(cm, raster, false, null);
if (useCache) {
cache.setImage(getClass(), null, w0, h0, cacheArgs, img);
}
graphics.drawImage(img, x0, y0, null);
return img;
}
/**
* Called to indicate that painting is finished. We create a new
* BufferedImage from the offscreen buffer, (optionally) cache it,
* and paint it.
*/
public void finishPainting(boolean useCache) {
DataBufferInt dataBuffer = new DataBufferInt(w0 * h0);
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
int transparency =
nativeFinishPainting(SunWritableRaster.stealData(dataBuffer, 0),
w0, h0);
SunWritableRaster.markDirty(dataBuffer);
int[] bands = BAND_OFFSETS[transparency - 1];
WritableRaster raster = Raster.createPackedRaster(
dataBuffer, w0, h0, w0, bands, null);
ColorModel cm = COLOR_MODELS[transparency - 1];
Image img = new BufferedImage(cm, raster, false, null);
if (useCache) {
cache.setImage(getClass(), null, w0, h0, cacheArgs, img);
}
graphics.drawImage(img, x0, y0, null);
}
protected void paintToImage(Component c, Image image, Graphics g,
int w, int h, Object[] args) {
boolean accEnabled = false;
Skin skin = (Skin)args[0];
Part part = skin.part;
State state = (State)args[1];
if (state == null) {
state = skin.state;
}
if (c == null) {
c = skin.component;
}
BufferedImage bi = (BufferedImage)image;
WritableRaster raster = bi.getRaster();
DataBufferInt dbi = (DataBufferInt)raster.getDataBuffer();
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
ThemeReader.paintBackground(SunWritableRaster.stealData(dbi, 0),
part.getControlName(c), part.getValue(),
State.getValue(part, state),
0, 0, w, h, w);
SunWritableRaster.markDirty(dbi);
}