【问题标题】:How to make image from BufferImage如何从 BufferedImage 制作图像
【发布时间】:2013-07-01 23:18:15
【问题描述】:

我正在尝试从 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) {}

【问题讨论】:

  • 你的输出是什么或错误是什么?
  • 你能澄清你所说的“它不工作”是什么意思吗?有编译时错误吗?运行时异常?如果是这样,异常和堆栈跟踪和消息是什么?有没有逻辑错误?
  • 如果您在 Windows 中工作,请更改这一行 Image image_1 = ImageIO.read(new File("saved.png")); to Image image_1 = ImageIO.read(new File("d:\\saved.png"));你会得到图像,
  • 看看this example,它从文件加载图像并在面板上绘画。也看看Performing Custom Painting2D Graphics
  • 你是如何编译程序的?您如何使用BufferedImage bimage = (BufferedImage)(new ImageIcon("str")).getImage();Image 转换为BufferedImage,编译器本身不是在这里阻止您吗?您是否尝试将 e.printStackTrace() 添加到您的 catch 块中?您一定遇到了某种异常,而您没有看到(例如无法将 Image 转换为 BufferedImage)

标签: java swing file-io bufferedimage imageicon


【解决方案1】:

也许您将IconImage 转换为BufferedImage 的方式不对。

所以你可以试试下面的sn-p

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

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

【讨论】:

  • @AbhilashGOyal 您要添加到JPanel 的图像是否已存在于磁盘上?
  • kaysush:实际上,我将 BufferImage 中的这张图片保存在磁盘上,然后从磁盘中读取这张图片
【解决方案2】:

希望这会更好,我已经尝试了很多次。

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

【讨论】:

  • 这不起作用 Image image_1 = ImageIO.read(new File("d:\\saved.png"));
  • @AbhilashGoyal,Goyal sahab,参考我的代码,我已经使用了 1000 多次,它没有错误,:)
【解决方案3】:

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

试试{

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

【讨论】:

    【解决方案4】:

    这里的每个人都没有抓住重点。 A BufferedImage is an Image.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      • 2013-07-24
      相关资源
      最近更新 更多