I am currently in the middle of a project in which I have to grayscale, blue filter, red filter, green filter, and fade the edges of a picture of a cat at the press of a JButton. grayscale and color filtering the picture was easy, but I can't seem to figure out how to fade the image's edges to black.
What I mean by this, is I have this picture of the cat I need to change:
and I need to change it into something like this one:
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
}
How would I create a method for this sort of filter and properly apply it to a button like the others?