1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
// ajoute la couche colorée sur une image
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);
BufferedImage b1 = DirectBufferIO.createBuffer(w, h, Transparency.TRANSLUCENT);
Graphics2D g0 = b0.createGraphics();
Graphics2D g1 = b1.createGraphics();
int alpha = c[0].getAlpha();
if (alpha < 255)
g0.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float)alpha / 255f));
g0.drawImage(i, 0, 0, null);
PaintToolkit.fillOpaqueGradient(g1, c, new Rectangle(0, 0, w, h));
b1.getAlphaRaster().setRect(b0.getAlphaRaster());
g.drawImage(b1, x, y, null);
g0 = null;
g1 = null;
DirectBufferIO.flushBuffer(b0);
DirectBufferIO.flushBuffer(b1);
}
// remplit un rectangle avec un tableau de dégradés rendus opaques
public static void fillOpaqueGradient(Graphics2D g, Color[] c0, Rectangle b) {
Color[] c = new Color[c0.length];
for (int i = 0 ; i < c0.length ; i++)
c[i] = ColorToolkit.setAlpha(c0[i], 255);
fillGradient(g, c, b);
}
// remplit un rectangle avec un tableau de dégradés
public static void fillGradient(Graphics2D g, Color[] c, Rectangle b) {
int n = c.length - 1;
if (n == 0) {
fillGradient(g, c[0], c[0], b);
return;
}
int h = b.height / n;
n--;
Rectangle r = new Rectangle(b.x, b.y, b.width, h);
for (int i = 0 ; i < n ; i++) {
fillGradient(g, c[i], c[i + 1], r);
r.y += h;
}
r.height = b.y + b.height - r.y;
fillGradient(g, c[n], c[n + 1], r);
}
// remplit un rectangle avec un dégradé de c0 à c1
private static void fillGradient(Graphics2D g, Color c0, Color c1, Rectangle r) {
Paint p = g.getPaint();
if (c0.getRGB() != c1.getRGB())
g.setPaint(new GradientPaint(r.x, r.y, c0, r.x, r.y + r.height, c1));
else
g.setColor(c0);
g.fillRect(r.x, r.y, r.width, r.height);
g.setPaint(p);
} |
Partager