将图像图标导出为缓冲图像
export imageIcon as buffered imaged
我下面的 java 代码现在在标签和按钮中显示一个 imageIcon。按下按钮时,它会绘制缓冲图像并导出该图像。导出的图片与图片图标中的图片无关
我不想绘制图像,而是希望导出 ImageIcon 中的图像,就像图像的绘制和导出方式一样。所以我觉得image Icon里面的图片要转成buffered image然后导出成400宽400高的图片。
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
public class second {
JFrame f;
second() throws IOException{
//use paintCompent
f=new JFrame();
JButton b1 = new JButton("Action Listener");
JLabel b2=new JLabel("");;
b2.setIcon(new ImageIcon(new ImageIcon("/Users/johnzalubski/Desktop/javaCode/cd.jpg").getImage().getScaledInstance(400, 400, Image.SCALE_DEFAULT)));
f.add(b1,BorderLayout.NORTH);
f.add(b2,BorderLayout.CENTER);
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int width = 300;
int height = 300;
BufferedImage buffIMg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = buffIMg.createGraphics();
g2d.setColor(Color.white);
g2d.fillRect(0, 0, width, height);
g2d.setColor(Color.black);
g2d.fillOval(0,0,width,height);
g2d.setColor(Color.orange);
g2d.drawString("Jessica ALba:", 55, 111);
g2d.dispose();
File file = new File("aa.png");
try {
ImageIO.write(buffIMg, "png",file);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
f.setSize(400,400);
f.setVisible(true);
}
public static void main(String[] args) throws IOException {
new second();
}
}
除了一个write
方法,ImageIO还有一个read方法。使用它来加载你的图像,而不是使用 ImageIcon 有一个图像加载器:
BufferedImage unscaledButtonImage;
try {
unscaledButtonImage = ImageIO.read(
new File("/Users/johnzalubski/Desktop/javaCode/cd.jpg"));
} catch (IOException e) {
throw new RuntimeException(e);
}
要缩放它,使用 scaling Graphics.drawImage method:
BufferedImage scaledButtonImage =
new BufferedImage(400, 400, unscaledButtonImage.getType());
Graphics g = scaledButtonImage.createGraphics();
g.drawImage(unscaledButtonImage, 0, 0, 400, 400, null);
g.dispose();
您可以轻松地从中制作一个 ImageIcon:
b2.setIcon(new ImageIcon(scaledButtonImage));
但是之后你不需要ImageIcon,因为你有原始的BufferedImage。
我下面的 java 代码现在在标签和按钮中显示一个 imageIcon。按下按钮时,它会绘制缓冲图像并导出该图像。导出的图片与图片图标中的图片无关
我不想绘制图像,而是希望导出 ImageIcon 中的图像,就像图像的绘制和导出方式一样。所以我觉得image Icon里面的图片要转成buffered image然后导出成400宽400高的图片。
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
public class second {
JFrame f;
second() throws IOException{
//use paintCompent
f=new JFrame();
JButton b1 = new JButton("Action Listener");
JLabel b2=new JLabel("");;
b2.setIcon(new ImageIcon(new ImageIcon("/Users/johnzalubski/Desktop/javaCode/cd.jpg").getImage().getScaledInstance(400, 400, Image.SCALE_DEFAULT)));
f.add(b1,BorderLayout.NORTH);
f.add(b2,BorderLayout.CENTER);
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int width = 300;
int height = 300;
BufferedImage buffIMg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = buffIMg.createGraphics();
g2d.setColor(Color.white);
g2d.fillRect(0, 0, width, height);
g2d.setColor(Color.black);
g2d.fillOval(0,0,width,height);
g2d.setColor(Color.orange);
g2d.drawString("Jessica ALba:", 55, 111);
g2d.dispose();
File file = new File("aa.png");
try {
ImageIO.write(buffIMg, "png",file);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
f.setSize(400,400);
f.setVisible(true);
}
public static void main(String[] args) throws IOException {
new second();
}
}
除了一个write
方法,ImageIO还有一个read方法。使用它来加载你的图像,而不是使用 ImageIcon 有一个图像加载器:
BufferedImage unscaledButtonImage;
try {
unscaledButtonImage = ImageIO.read(
new File("/Users/johnzalubski/Desktop/javaCode/cd.jpg"));
} catch (IOException e) {
throw new RuntimeException(e);
}
要缩放它,使用 scaling Graphics.drawImage method:
BufferedImage scaledButtonImage =
new BufferedImage(400, 400, unscaledButtonImage.getType());
Graphics g = scaledButtonImage.createGraphics();
g.drawImage(unscaledButtonImage, 0, 0, 400, 400, null);
g.dispose();
您可以轻松地从中制作一个 ImageIcon:
b2.setIcon(new ImageIcon(scaledButtonImage));
但是之后你不需要ImageIcon,因为你有原始的BufferedImage。