Java 如何从BufferImage生成图像
我试图从BufferImage生成图像,但它不起作用。这是我的密码 这个代码不起作用,有人能帮我吗Java 如何从BufferImage生成图像,java,swing,file-io,bufferedimage,imageicon,Java,Swing,File Io,Bufferedimage,Imageicon,我试图从BufferImage生成图像,但它不起作用。这是我的密码 这个代码不起作用,有人能帮我吗 try { BufferedImage bimage = (BufferedImage)(new ImageIcon("str")).getImage(); BufferedImage image = new BufferedImage(500, 500, bimage.TYPE_BYTE_GRAY); File outputfile = new Fi
try {
BufferedImage bimage = (BufferedImage)(new ImageIcon("str")).getImage();
BufferedImage image = new BufferedImage(500, 500, bimage.TYPE_BYTE_GRAY);
File outputfile = new File("saved.png");
ImageIO.write(image, "png", outputfile);
Image image_1 = ImageIO.read(new File("saved.png"));
lp2_2.setIcon(new ImageIcon(image_1));
} catch (IOException e) {}
希望这会更好,我已经试过很多次了
public void writeImage(String output, String fileName, BufferedImage img) throws IOException {
File file = new File(output + "\\HE\\" + fileName + ".bmp");
ImageIO.write(img, "bmp", file);
}
=================================================================================
如果您想在任何JPanel中使用此图像,那么下面是它的代码,它已经可以正常工作了
import java.awt.BorderLayout;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
public class ShowImage {
public ShowImage(final String filename) throws Exception {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame editorFrame = new JFrame("My Frame " +filename);
editorFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
BufferedImage image = null;
try {
image = ImageIO.read(new File(filename));
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
ImageIcon imageIcon = new ImageIcon(image);
JLabel jLabel = new JLabel();
jLabel.setIcon(imageIcon);
editorFrame.getContentPane().add(jLabel, BorderLayout.CENTER);
editorFrame.pack();
editorFrame.setLocationRelativeTo(null);
editorFrame.setVisible(true);
}
});
}
}
也许您将
IconImage
转换为BufferedImage
的方法不正确
因此,您可以尝试以下代码段
BufferedImage bi = new BufferedImage(icon.getIconWidth(),icon.getIconHeight(), BufferedImage.TYPE_INT_RGB);
Graphics g = bi.createGraphics();
// paint the Icon to the BufferedImage.
icon.paintIcon(null, g, 0,0);
g.dispose();
在此之后,您可以使用BufferdImage
,因为您已经在使用
或者你可以看看这个问题
如果您想了解如何将图像
转换为“bifferidimage”,因为正如本文所述,您不能将图像
转换为缓冲图像
尽管我会要求您添加更多信息,如您正在获得的错误或异常以及可能出现的异常,但请添加stacktrace。这是我的新代码,它工作正常。。。谢谢大家的支持 试一试{
BufferedImage cat=ImageIO.read(新文件(str));
对于(int w=0;w这里的每个人都没有抓住要点 您的输出或错误是什么?您能否澄清“它不工作”是什么意思?是否存在编译时错误?运行时异常?异常和堆栈跟踪以及消息是什么?是否存在逻辑错误?如果您在windows中工作,请更改此行Image\u 1=ImageIO.read(新文件(“saved.png”);到Image\u 1=ImageIO.read(新文件(“d:\\saved.png”);您将获得图像,看看从文件中加载图像并将其绘制到面板上。另外,看看你是如何编译这个程序的?如何使用BufferedImage bimage=(BufferedImage)(newimageicon(“str”)).getImage()将图像强制转换为a代码>,编译器本身不是在阻止您吗?您是否尝试将e.printStackTrace()
添加到catch块?您一定是遇到了某种异常,而您没有看到它(例如无法将图像强制转换为BuffereImage)这是不工作的图像图像\u 1=ImageIO.read(新文件(“d:\\saved.png”)@AbhilashGoyal,Goyal sahab,参考我的代码,我已经使用了1000多次,它是无错误的,:)@AbhilashGoyal你想添加到JPanel
的映像是否已经存在于磁盘上?kaysush:实际上,我正在从磁盘上的缓冲区映像保存此映像,然后从磁盘读取此映像
BufferedImage cat = ImageIO.read(new File(str));
for (int w = 0; w < cat.getWidth(); w++) {
for (int h = 0; h < cat.getHeight(); h++) {
Color color = new Color(cat.getRGB(w, h));
//int averageColor = ((color.getRed() + color.getGreen() + color.getBlue()) / 3);
//int averageColor = int((color.getRed())*0.21 +(color.getGreen())*0.71+(color.getBlue())*0.07);
double r =color.getRed()*0.21;
double g =color.getGreen()*0.71;
double b =color.getBlue()*0.07;
int averageColor = (int)(r+g+b);
Color avg = new Color(averageColor, averageColor, averageColor);
cat.setRGB(w, h, avg.getRGB());
}
}
ImageIO.write(cat, "jpg", new File("image_greyscale.jpg"));
lp2_2.setIcon(new ImageIcon((new ImageIcon("image_greyscale.jpg")).getImage().getScaledInstance( 600, 600, java.awt.Image.SCALE_SMOOTH )));
}catch(IOException e){
e.printStackTrace();
System.exit(1);}