Установите BufferedImage, чтобы быть цветом в Java - PullRequest
20 голосов
/ 17 сентября 2009

Мне нужно создать прямоугольник BufferedImage с заданным цветом фона, нарисовать некоторый узор на фоне и сохранить его в файл. Я не знаю, как создать фон.

Я использую вложенный цикл:

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

Но это очень медленно, когда изображение большое.

Как установить цвет более эффективным способом?

Ответы [ 5 ]

53 голосов
/ 17 сентября 2009

Получить графический объект для изображения, установить текущую краску на нужный цвет, затем вызвать fillRect(0,0,width,height).

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() );
9 голосов
/ 17 сентября 2009

Возможно что-то вроде:

BufferedImage image = new BufferedImage(...);
Graphics2D g2d = image.createGraphics();
g2d.setColor(...);
g2d.fillRect(...);
5 голосов
/ 24 марта 2015

Используйте это:

BufferedImage bi = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_ARGB);
Graphics2D ig2 = bi.createGraphics();

ig2.setBackground(Color.WHITE);
ig2.clearRect(0, 0, width, height);
3 голосов
/ 29 апреля 2016
BufferedImage image = new BufferedImage(width,height, BufferedImage.TYPE_INT_ARGB);
int[]data=((DataBufferInt) image.getRaster().getDataBuffer()).getData();
Arrays.fill(data,color.getRGB());
1 голос
/ 25 января 2019

Для тех, кто хочет также сохранить созданное изображение в файл, я использовал предыдущие ответы и добавил часть сохранения файла:

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

Вы также можете сохранить изображение в других форматах, таких как BMP, JPG и т.д ...

...