Image Color Render
来源:互联网 发布:nba2k14数据修改器 编辑:程序博客网 时间:2024/05/17 04:32
import java.awt.event.*;
import java.awt.image.*;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.filechooser.FileNameExtensionFilter;
public class ImageColorRenderFrame extends JFrame implements ActionListener,
ChangeListener {
private static final long serialVersionUID = -3239696245073823821L;
public static void main(String[] args) {
ImageColorRenderFrame frame = new ImageColorRenderFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private Image src;
private Image image;
private JMenuItem save;
private JLabel imageLabel;
private JRadioButtonMenuItem filter, reverseFilter;
private JFileChooser chooser;
private JSlider sliderR, sliderG, sliderB;
public ImageColorRenderFrame() {
setTitle("Image Color Filter ");
setLayout(new BorderLayout());
setSize(410, 310);
// menu
JMenuBar menubar = new JMenuBar();
//
JMenu mnuFile = new JMenu("File");
mnuFile.setMnemonic('f');
JMenuItem open = new JMenuItem("Open...", 'o');
open.addActionListener(this);
save = new JMenuItem("Save As...", 'a');
save.setEnabled(false);
save.addActionListener(this);
JMenuItem exit = new JMenuItem("Exit", 'x');
exit.addActionListener(this);
mnuFile.add(open);
mnuFile.addSeparator();
mnuFile.add(save);
mnuFile.addSeparator();
mnuFile.add(exit);
JMenu mnuOption = new JMenu("Option");
mnuOption.setMnemonic('o');
// ButtonGroup for radio buttons
ButtonGroup optionGroup = new ButtonGroup();
filter = new JRadioButtonMenuItem("Filter");
filter.setMnemonic('f');
filter.addActionListener(this);
optionGroup.add(filter);
reverseFilter = new JRadioButtonMenuItem("Render", true);
reverseFilter.setMnemonic('r');
reverseFilter.addActionListener(this);
optionGroup.add(reverseFilter);
mnuOption.add(filter);
mnuOption.add(reverseFilter);
//
menubar.add(mnuFile);
menubar.add(mnuOption);
setJMenuBar(menubar);
// chooser
chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"JPG & GIF & PNG ...", "jpg", "gif", "png");
chooser.setFileFilter(filter);
chooser.setCurrentDirectory(new File("."));
// imageLabel
JPanel panel = new JPanel();
panel.setSize(400, 300);
imageLabel = new JLabel();
panel.add(imageLabel, BorderLayout.CENTER);
add(panel, BorderLayout.CENTER);
// slider
JPanel p = new JPanel();
p.setLayout(new GridLayout());
sliderR = new JSlider(0, 0xff, 0);
sliderR.setBorder(BorderFactory.createTitledBorder("Red"));
sliderR.setMajorTickSpacing(50);
sliderR.setMinorTickSpacing(10);
sliderR.setPaintTicks(true);
sliderR.setPaintLabels(true);
sliderR.addChangeListener(this);
sliderG = new JSlider(0, 0xff, 0);
sliderG.setBorder(BorderFactory.createTitledBorder("Green"));
sliderG.setMajorTickSpacing(50);
sliderG.setMinorTickSpacing(10);
sliderG.setPaintTicks(true);
sliderG.setPaintLabels(true);
sliderG.addChangeListener(this);
sliderB = new JSlider(0, 0xff, 0);
sliderB.setBorder(BorderFactory.createTitledBorder("Blue"));
sliderB.setMajorTickSpacing(50);
sliderB.setMinorTickSpacing(10);
sliderB.setPaintTicks(true);
sliderB.setPaintLabels(true);
sliderB.addChangeListener(this);
p.add(sliderR);
p.add(sliderG);
p.add(sliderB);
add(p, BorderLayout.NORTH);
}
@Override
public void stateChanged(ChangeEvent e) {
JSlider slider = (JSlider) e.getSource();
if (!slider.getValueIsAdjusting()) {
slider.setToolTipText(String.valueOf(slider.getValue()));
if (src != null) {
ImageFilter filter = new ColorFilter(sliderR.getValue(),
sliderG.getValue(), sliderB.getValue(),
this.filter.isSelected());
FilteredImageSource filteredSrc = new FilteredImageSource(
src.getSource(), filter);
image = Toolkit.getDefaultToolkit().createImage(filteredSrc);
imageLabel.setIcon(new ImageIcon(image));
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand() == "Open...") {
int result = chooser.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
String filename = chooser.getSelectedFile().getPath();
src = new ImageIcon(filename).getImage();
if (src != null) {
imageLabel.setIcon(new ImageIcon(src));
save.setEnabled(true);
} else
save.setEnabled(false);
pack();
setLocationRelativeTo(null);
}
}
if (e.getActionCommand() == "Save As...") {
int result = chooser.showSaveDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
String filename = chooser.getSelectedFile().getPath();
File file = new File(filename);
try {
ImageIO.write(image2BufferedImage(image),
getFileType(file), file);
} catch (Exception ew) {
JOptionPane.showMessageDialog(this, ew.getMessage(),
"Error", JOptionPane.ERROR_MESSAGE);
}
}
}
if (e.getActionCommand() == "Exit")
System.exit(0);
if (e.getActionCommand() == "Filter") {
sliderR.setValueIsAdjusting(false);
}
if (e.getActionCommand() == "Render") {
sliderR.setValueIsAdjusting(true);
}
}
public String getFileType(File file) {
String filename = file.getName();
return filename.substring(filename.lastIndexOf(".") + 1);
}
public BufferedImage image2BufferedImage(Image image) {
image = new ImageIcon(image).getImage();
BufferedImage bufferedImage = new BufferedImage(image.getWidth(null),
image.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics g = bufferedImage.createGraphics();
g.setColor(Color.white);
g.fillRect(0, 0, image.getWidth(null), image.getHeight(null));
g.drawImage(image, 0, 0, null);
g.dispose();
return bufferedImage;
}
}
class ColorFilter extends RGBImageFilter {
private int filterRgb;// 过滤值
private boolean isFilter;// 是否反转过滤
public ColorFilter(Color targetColor) {
this(targetColor, true);
}
public ColorFilter(Color targetColor, boolean isFilter) {
canFilterIndexColorModel = true;
this.isFilter = isFilter;
filterRgb = targetColor.getRGB();
}
public ColorFilter(int r, int g, int b) {
this(0xff, r, g, b, true);
}
public ColorFilter(int r, int g, int b, boolean isFilter) {
this(0xff, r, g, b, isFilter);
}
public ColorFilter(int a, int r, int g, int b) {
this(a, r, g, b, true);
}
public ColorFilter(int a, int r, int g, int b, boolean isFilter) {
canFilterIndexColorModel = true;
this.isFilter = isFilter;
filterRgb = a << 24 | (r << 16) | (g << 8) | b;
}
@Override
public int filterRGB(int x, int y, int rgb) {
return isFilter ? rgb & filterRgb : rgb | filterRgb;
}
}
效果:
参考:http://blog.csdn.net/dahual/article/details/6673439
- Image Color Render
- invert color of image
- color 转 image
- Color Image Processing
- Color Transfer Between Image
- Render;
- render
- Color Image Processing: Methods and Applications
- 颜色值(Color)转换成图片(Image)
- golang中image/color包的用法
- 通过一个color创建一个image
- UIImage分类将color转换为image
- Image Color Space(图像色彩空间)
- Direct3D试玩 - 实现一个Image Render
- ReportViewer报表导出成Excel,Image,PDF---LocalReport.Render
- How to Render Image Buffer in Android NDK Native Code
- How to Render Image Buffer in Android NDK Native Code
- Go语言学习之image、image/color、image/png、image/jpeg包(the way to go)
- Android 菜单(OptionMenu)大全 建立你自己的菜单
- Java程序练习-Mobile Number
- POJ--3580[SuperMemo] Splay_Tree
- Wait queues
- Android四个重要的组件类型
- Image Color Render
- OS0002.AIX5.3.10(HACMP5.2)中Oracle双机操作日志
- android动态布局方法总结
- Java程序练习-2011
- 探索神秘的Android
- Android键盘响应函数
- apache启动报错# Address already in use: make_sock: could not bind to address [::]:80
- Flex+FluorineFx与.net基础(一)
- 将类似数据用空行、空列进行分组显示可以使阅读者更加容易搜索和比较数据