تعيين BufferedImage أن يكون اللون في جاوة
-
10-07-2019 - |
سؤال
وأنا بحاجة إلى إنشاء BufferedImage
مستطيلة مع لون الخلفية المحدد، واستخلاص بعض نمط على خلفية وحفظه إلى ملف. أنا لا أعرف كيفية إنشاء الخلفية.
وأنا باستخدام حلقة متداخلة:
BufferedImage b_img = ...
for every row
for every column
setRGB(r,g,b);
ولكن كان بطيئا للغاية عندما تكون الصورة كبيرة.
وكيفية تعيين لون بطريقة أكثر كفاءة؟
المحلول
الحصول على كائن الرسومات للصورة، ضبط الطلاء الحالي إلى اللون المطلوب، ثم استدعاء 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() );
نصائح أخرى
وربما شيء من هذا القبيل:
BufferedImage image = new BufferedImage(...);
Graphics2D g2d = image.createGraphics();
g2d.setColor(...);
g2d.fillRect(...);
استخدم هذا:
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());
لالراغبين أيضا في حفظ الصورة التي تم إنشاؤها إلى ملف، ولقد استخدمت الأجوبة السابقة، وأضاف الملف توفير جزء:
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، الخ ...
لا تنتمي إلى StackOverflow