سؤال

وأنا بحاجة إلى إنشاء 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، الخ ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top