Java 如何从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

我试图从BufferImage生成图像,但它不起作用。这是我的密码

这个代码不起作用,有人能帮我吗

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);}