Frage

Ich brauche einen rechteckigen BufferedImage mit einer bestimmten Hintergrundfarbe zu erstellen, einige Muster auf dem Hintergrund ziehen und speichern Sie es einreichen. Ich weiß nicht, wie Sie den Hintergrund erstellen.

Ich verwende eine verschachtelte Schleife:

BufferedImage b_img = ...
for every row
for every column
setRGB(r,g,b);

Aber es ist sehr langsam, wenn das Bild groß ist.

Wie die Farbe in einer effizienteren Weise setzen?

War es hilfreich?

Lösung

Holen Sie sich die Grafiken für das Bildobjekt, stellen Sie die aktuelle Farbe auf die gewünschte Farbe, und fillRect(0,0,width,height) nennen.

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() );

Andere Tipps

Wahrscheinlich so etwas wie:

BufferedImage image = new BufferedImage(...);
Graphics2D g2d = image.createGraphics();
g2d.setColor(...);
g2d.fillRect(...);

verwenden:

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());

Für die auch will, in eine Datei, die erstellte Bild zu speichern, habe ich bisherige Antworten verwendet und hinzugefügt, um die Datei Teil zu speichern:

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);

Sie können das Bild auch in anderen Formaten wie BMP, JPG speichern, etc ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top