Définir BufferedImage pour qu’il soit une couleur en Java
-
10-07-2019 - |
Question
Je dois créer un BufferedImage
rectangulaire avec une couleur d'arrière-plan spécifiée, tracer un motif sur l'arrière-plan et l'enregistrer dans un fichier. Je ne sais pas comment créer le fond.
J'utilise une boucle imbriquée:
BufferedImage b_img = ...
for every row
for every column
setRGB(r,g,b);
Mais c'est très lent quand l'image est grande.
Comment définir la couleur de manière plus efficace?
La solution
Obtenez l'objet graphique de l'image, réglez la peinture actuelle sur la couleur souhaitée, puis appelez fillRect (0,0, largeur, hauteur)
.
BufferedImage b_img = ...
Graphics2D graphics = b_img.createGraphics();
graphics.setPaint ( new Color ( r, g, b ) );
graphics.fillRect ( 0, 0, b_img.getWidth(), b_img.getHeight() );
Autres conseils
Probablement quelque chose comme:
BufferedImage image = new BufferedImage(...);
Graphics2D g2d = image.createGraphics();
g2d.setColor(...);
g2d.fillRect(...);
Utilisez ceci:
BufferedImage bi = new BufferedImage(width, height,
BufferedImage.TYPE_INT_ARGB);
Graphics2D ig2 = bi.createGraphics();
ig2.setBackground(Color.WHITE);
ig2.clearRect(0, 0, width, height);
BufferedImage image = new BufferedImage(width,height, BufferedImage.TYPE_INT_ARGB);
int[]data=((DataBufferInt) image.getRaster().getDataBuffer()).getData();
Arrays.fill(data,color.getRGB());
Pour ceux qui souhaitent également enregistrer l'image créée dans un fichier, j'ai utilisé les réponses précédentes et ajouté la partie relative à la sauvegarde du fichier:
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
// Create the image
BufferedImage bi = new BufferedImage(80, 40, ColorSpace.TYPE_RGB);
Graphics2D graphics = bi.createGraphics();
// Fill the background with gray color
Color rgb = new Color(50, 50, 50);
graphics.setColor (rgb);
graphics.fillRect ( 0, 0, bi.getWidth(), bi.getHeight());
// Save the file in PNG format
File outFile = new File("output.png");
ImageIO.write(bi, "png", outFile);
Vous pouvez également enregistrer l'image dans d'autres formats, tels que bmp, jpg, etc ...