如何从BufferedImage制作图像

时间:2013-07-04 04:44:46

标签: java swing file-io bufferedimage imageicon

我正在尝试从BufferedImage制作图像,但它不起作用。这是我的代码......

此代码无效,任何人都可以帮助我......

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

4 个答案:

答案 0 :(得分:3)

希望这会更好用,我已多次尝试过。

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

答案 1 :(得分:2)

也许您将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

或者您可以查看此问题Java converting Image to BufferedImage 如果你想看看如何将Image转换为'BifferedImage',因为在这篇文章中你不能只将Image转换为BufferedImage

虽然我会要求你添加更多信息,例如你得到的错误或异常,如果有异常,可能会添加堆栈跟踪。

答案 2 :(得分:1)

这是我的新代码,它的工作正常...谢谢大家的支持......

尝试{

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

答案 3 :(得分:0)

这里的每个人都错过了这一点。 A BufferedImage is an Image.