-1

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

4 に答える 4

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は、すでに使用しているのと同じように使用できます。

または、「BifferedImage」 に変換する方法を確認したい場合は、 Java conversion Image to BufferedImageを見ることができます。ImageImageBufferedImage

発生しているエラーや例外などの詳細情報を追加するようにお願いしますが、例外がある場合はスタックトレースを追加してください。

于 2013-07-04T04:54:41.693 に答える
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);}
于 2013-07-04T17:00:55.143 に答える