private BufferedImage createBinaryImage(int w, int h, int pixelBits) { int bytesPerRow = w * pixelBits / 8; if (w * pixelBits % 8 != 0) {
bytesPerRow++;
} byte[] imageData = newbyte[h * bytesPerRow];
IndexColorModel cm = null; switch (pixelBits) { case1:
cm = new IndexColorModel(pixelBits, lut1Arr.length,
lut1Arr, lut1Arr, lut1Arr); break; case2:
cm = new IndexColorModel(pixelBits, lut2Arr.length,
lut2Arr, lut2Arr, lut2Arr); break; case4:
cm = new IndexColorModel(pixelBits, lut4Arr.length,
lut4Arr, lut4Arr, lut4Arr); break; default:
Logger.getLogger(Surface.class.getName()).log(Level.SEVERE, null, new Exception("Invalid # of bit per pixel"));
}
DataBuffer db = new DataBufferByte(imageData, imageData.length);
WritableRaster r = Raster.createPackedRaster(db, w, h, pixelBits, null); returnnew BufferedImage(cm, r, false, null);
}
private BufferedImage createSGISurface(int w, int h, int pixelBits) { int rMask32 = 0xFF000000; int rMask16 = 0xF800; int gMask32 = 0x00FF0000; int gMask16 = 0x07C0; int bMask32 = 0x0000FF00; int bMask16 = 0x003E;
DirectColorModel dcm = null;
DataBuffer db = null;
WritableRaster wr = null; switch (pixelBits) { case16: short[] imageDataUShort = newshort[w * h];
dcm = new DirectColorModel(16, rMask16, gMask16, bMask16);
db = new DataBufferUShort(imageDataUShort,
imageDataUShort.length);
wr = Raster.createPackedRaster(db, w, h, w, newint[] { rMask16, gMask16, bMask16 }, null); break; case32: int[] imageDataInt = newint[w * h];
dcm = new DirectColorModel(32, rMask32, gMask32, bMask32);
db = new DataBufferInt(imageDataInt, imageDataInt.length);
wr = Raster.createPackedRaster(db, w, h, w, newint[] { rMask32, gMask32, bMask32 }, null); break; default:
Logger.getLogger(Surface.class.getName()).log(Level.SEVERE, null, new Exception("Invalid # of bit per pixel"));
}
returnnew BufferedImage(dcm, wr, false, null);
}
public Graphics2D createGraphics2D(int width, int height,
BufferedImage bi,
Graphics g) {
Graphics2D g2 = null;
if (bi != null) {
g2 = bi.createGraphics();
} else {
g2 = (Graphics2D) g;
}
if (texture != null) { // set composite to opaque for texture fills
g2.setComposite(AlphaComposite.SrcOver);
g2.setPaint(texture);
g2.fillRect(0, 0, width, height);
}
if (composite != null) {
g2.setComposite(composite);
}
return g2;
}
// ...demos that extend Surface must implement this routine... publicabstractvoid render(int w, int h, Graphics2D g2);
/** *It'spossibletoturnoffdouble-bufferingforjusttherepaint *callsinvokeddirectlyonthenondoublebufferedcomponent. *ThiscanbedonebyoverridingpaintImmediately()(whichiscalled *asaresultofrepaint)andgettingthecurrentRepaintManagerand *turningoffdoublebufferingintheRepaintManagerbeforecalling *super.paintImmediately(g).
*/
@Override publicvoid paintImmediately(int x, int y, int w, int h) {
RepaintManager repaintManager = null; boolean save = true; if (!isDoubleBuffered()) {
repaintManager = RepaintManager.currentManager(this);
save = repaintManager.isDoubleBufferingEnabled();
repaintManager.setDoubleBufferingEnabled(false);
} super.paintImmediately(x, y, w, h);
if (repaintManager != null) {
repaintManager.setDoubleBufferingEnabled(save);
}
}
@Override publicvoid paint(Graphics g) {
super.paint(g);
Dimension d = getSize();
if (biw != d.width || bih != d.height) {
toBeInitialized = true;
biw = d.width;
bih = d.height;
}
publicstaticvoid createDemoFrame(Surface surface) { final DemoPanel dp = new DemoPanel(surface, new DemoInstVarsAccessorImplBase());
Frame f = new Frame("J2D Demo - " + surface.name);
f.addWindowListener(new WindowAdapter() {
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.