1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
// g : destination de dessin, i : image source sur laquelle le dégradé est appliqué, c : couleurs du dégradé, x et y : coordonnées de dessin
public static void drawAdditionnalGradient(Graphics2D g, BufferedImage i, Color[] c, int x, int y) {
int w = i.getWidth();
int h = i.getHeight();
BufferedImage b0 = DirectBufferIO.createBuffer(w, h, Transparency.TRANSLUCENT, "PaintToolkit.drawAdditionnalGradient,0"); // création des bufferq
BufferedImage b1 = DirectBufferIO.createBuffer(w, h, Transparency.TRANSLUCENT, "PaintToolkit.drawAdditionnalGradient,1");
Graphics2D g0 = b0.createGraphics();
Graphics2D g1 = b1.createGraphics();
int alpha = c[0].getAlpha(); //composante transparence du dégradé, donné par la composante alpha de la première couleur du dégradé
if (alpha < 255)
g0.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float)alpha / 255f)); // dessiner en transparent sur g0
g0.drawImage(i, 0, 0, null); // on dessine l'image i en transparent sur g0
fillOpaqueGradient(g1, c, new Rectangle(0, 0, w, h)); // créer un dégradé de couleurs opaque dans g1
b1.getAlphaRaster().setRect(b0.getAlphaRaster()); // la transparence de b1 devient celle de b0, on obtient un dégradé découpé et transparent
g.drawImage(b1, x, y, null); // dessin du déradé dans la destination
g0 = null; // vidange mémoire
g1 = null;
DirectBufferIO.flushBuffer(b0);
DirectBufferIO.flushBuffer(b1);
} |