Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中淡化图像的边缘?(举例说明) 我目前正处于一个项目中,在这个项目中,我必须在JButt上按下灰度、蓝色滤光器、红色滤光器、绿色滤光片,并使猫的图像边缘褪色。灰度和颜色过滤图片很容易,但我似乎不知道如何将图像边缘淡入黑色_Java_Image_Jframe_Jbutton - Fatal编程技术网

如何在Java中淡化图像的边缘?(举例说明) 我目前正处于一个项目中,在这个项目中,我必须在JButt上按下灰度、蓝色滤光器、红色滤光器、绿色滤光片,并使猫的图像边缘褪色。灰度和颜色过滤图片很容易,但我似乎不知道如何将图像边缘淡入黑色

如何在Java中淡化图像的边缘?(举例说明) 我目前正处于一个项目中,在这个项目中,我必须在JButt上按下灰度、蓝色滤光器、红色滤光器、绿色滤光片,并使猫的图像边缘褪色。灰度和颜色过滤图片很容易,但我似乎不知道如何将图像边缘淡入黑色,java,image,jframe,jbutton,Java,Image,Jframe,Jbutton,我的意思是,我有一张我需要改变的猫的照片: 我需要把它改成这样: 我如何为这种过滤器创建一种方法,并将其正确地应用于其他按钮?您必须单独编辑每个像素。这个解决方案的主要思想是,你有一个图像的中心,每个像素都会随着到中心的距离而改变。 更简单地说,远离中心的像素将变得更暗。 这是您的代码的外观: 当我运行此代码时: 请记住,您始终可以通过更改上述代码中的比例变量来更改效果。谢谢!修改后,它返回了一个缓冲图像,改变了比例,并对其进行了一些修改,以更好地了解它是如何工作的,这是完美的!

我的意思是,我有一张我需要改变的猫的照片:

我需要把它改成这样:


我如何为这种过滤器创建一种方法,并将其正确地应用于其他按钮?

您必须单独编辑每个像素。这个解决方案的主要思想是,你有一个图像的中心,每个像素都会随着到中心的距离而改变。 更简单地说,远离中心的像素将变得更暗。 这是您的代码的外观:

当我运行此代码时:


请记住,您始终可以通过更改上述代码中的比例变量来更改效果。

谢谢!修改后,它返回了一个缓冲图像,改变了比例,并对其进行了一些修改,以更好地了解它是如何工作的,这是完美的!
    import javax.imageio.ImageIO;
    import javax.swing.JButton;
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.ImageIcon;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException; 

    public class GUIKittenPicJC {
        public static class KittenChanger extends JPanel {
                BufferedImage img = null;
                File Kitten = null;
                ImageIcon imagetransformed = null;
                JButton grayscale = new JButton("Grayscale Image");
                JButton rgbB = new JButton("Blue filter this image");
                JButton rgbR = new JButton("Red filter this image");
                JButton rgbG = new JButton("Green filter this image");
                JButton fader = new JButton("Fade this image");
                {
                try
                {
                    Kitten = new File("C:\\Users\\Jarrod\\Desktop\\Lab 3\\Lab 3\\kitten.bmp");
                    img = ImageIO.read(Kitten);
                }
                catch(IOException e)
                {
                  System.out.println(e);
                }
            ImageIcon image = new ImageIcon(img);
            JLabel imageLabel = new JLabel(image);
            add(imageLabel);
            grayscale.addActionListener(e->{
                       imagetransformed = new ImageIcon(Grayscale(img));
                       imageLabel.setIcon(imagetransformed);
                       imgReset();
                    });
            rgbB.addActionListener(e->{
                   imagetransformed = new ImageIcon(Bluify(img));
                   imageLabel.setIcon(imagetransformed);
                   imgReset();
                });
            rgbG.addActionListener(e->{
                   imagetransformed = new ImageIcon(Greenify(img));
                   imageLabel.setIcon(imagetransformed);
                   imgReset();
                });
            rgbR.addActionListener(e->{
                   imagetransformed = new ImageIcon(Redify(img));
                   imageLabel.setIcon(imagetransformed);
                   imgReset();
                });
                        add(grayscale);
                        add(rgbB);
                        add(rgbG);
                        add(rgbR);
                }
                private void imgReset() {
                    try {
                            img = ImageIO.read(Kitten);
                        } 
                    catch (IOException e1)
                        {
                            e1.printStackTrace();
                        }
                }

        }
        public static void main(String[] args)
        {
           createGUI();
          }
            private static void createGUI() {


                JFrame frame = new JFrame("Kitten Changer");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                KittenChanger newContentPane = new KittenChanger();
                newContentPane.setOpaque(true);
                frame.setContentPane(newContentPane);
                frame.setSize(400, 500);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }

//Grayscale and rgb filter methods follow, not important to question
}
BufferedImage cat; //assuming it is assigned
for(int i = 0; i < cat.getWidth(); i++) { // i is the x coord
    for(int j = 0; j < cat.getHeight(); j++) { // j is the y coord
        int color = cat.getRGB(i, j);
        int r = (color >> 16) & 0xff; //extract red value
        int g = (color >> 8) & 0xff;
        int b = color & 0xff;
        double scale = 0.75; /**** Change this to change the resulting effect ****/
        //pixel's distance from center
        double dist = Math.sqrt( Math.pow(i - cat.getWidth()/2, 2) + Math.pow(j - cat.getHeight()/2, 2) );
        r = (int) Math.max(0, r - dist*scale); //r - dist*scale makes px darker
        g = (int) Math.max(0, g - dist*scale); //Math.max makes sure r is always >= 0
        b = (int) Math.max(0, b - dist*scale);
        int newRGB = (r << 16) + (g << 8) + b; //convert r,g,b to single int
        cat.setRGB(i, j, newRGB); //finally, update rgb value
    }

}