java Graphics2D - 生成动态图像
java Graphics2D - generate dynamic image
我正在学习 Java Graphics2D,我在生成图像时遇到了问题。
请找到以下代码和输出图像:
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class DynamicImage {
public static void main(String[] args) {
Dimension imgDim = new Dimension(1000,1000);
BufferedImage buffImage = new BufferedImage(imgDim.width, imgDim.height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = buffImage.createGraphics();
g2d.setBackground(Color.WHITE);
g2d.fillRect(0, 0, imgDim.width, imgDim.height);
g2d.setColor(Color.BLACK);
BasicStroke bs = new BasicStroke(2);
g2d.setStroke(bs);
Font font = new Font("Arial", Font.PLAIN, 20);
g2d.setFont(font);
String[] alphabets = {"A","B","C","D","E","F","G","H","I","J","K"};
for(int i=0;i<alphabets.length;i++) {
g2d.drawString(alphabets[i], (50*(i)), 500);
g2d.drawLine((50*(i)), 500, (50*(i+1)), 500);
}
try {
ImageIO.write(buffImage, "png", new File("C:\Alphabets.png"));
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
正如您在上面注意到的那样,字母与线条重叠,这是我不想要的,换句话说,我希望输出如下:
A____B___C___D___E___F___G___H___I___J___K___
能否请您帮助更正上述代码以获得所需的输出?
您将需要使用 FontMetrics
class:
FontMetrics fm = g2d.getFontMetrics();
然后你需要得到每个字符的宽度:
int width = fm.stringWidth( alphabets[i] );
然后开始画字宽后的线:
g2d.drawLine((50*(i)) + width, 500, (50*(i+1)), 500);
以上逻辑未经测试,但希望你能明白。
我正在学习 Java Graphics2D,我在生成图像时遇到了问题。
请找到以下代码和输出图像:
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class DynamicImage {
public static void main(String[] args) {
Dimension imgDim = new Dimension(1000,1000);
BufferedImage buffImage = new BufferedImage(imgDim.width, imgDim.height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = buffImage.createGraphics();
g2d.setBackground(Color.WHITE);
g2d.fillRect(0, 0, imgDim.width, imgDim.height);
g2d.setColor(Color.BLACK);
BasicStroke bs = new BasicStroke(2);
g2d.setStroke(bs);
Font font = new Font("Arial", Font.PLAIN, 20);
g2d.setFont(font);
String[] alphabets = {"A","B","C","D","E","F","G","H","I","J","K"};
for(int i=0;i<alphabets.length;i++) {
g2d.drawString(alphabets[i], (50*(i)), 500);
g2d.drawLine((50*(i)), 500, (50*(i+1)), 500);
}
try {
ImageIO.write(buffImage, "png", new File("C:\Alphabets.png"));
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
正如您在上面注意到的那样,字母与线条重叠,这是我不想要的,换句话说,我希望输出如下: A____B___C___D___E___F___G___H___I___J___K___
能否请您帮助更正上述代码以获得所需的输出?
您将需要使用 FontMetrics
class:
FontMetrics fm = g2d.getFontMetrics();
然后你需要得到每个字符的宽度:
int width = fm.stringWidth( alphabets[i] );
然后开始画字宽后的线:
g2d.drawLine((50*(i)) + width, 500, (50*(i+1)), 500);
以上逻辑未经测试,但希望你能明白。