资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
您的位置:咨询直通车您的位置:咨询直通车岗位入门知识岗位入门知识ITIT 类类JAVAJAVA 例子例子 模糊与锐化模糊与锐化发布时间发布时间:2009-01-25 10:33:36来源来源:网络点击数点击数:683import java.awt.*;import java.awt.event.*;import java.awt.image.*;import javax.swing.*;import java.io.*;/ 图像的模糊与锐化public class BlurAndSharpenDemo extends JFrame implements ActionListener private JPanel jPanel = new JPanel(); /面板 jPanel 用于容纳模糊、锐化、还原图像按钮private JButton buttonFile; /打开图像文件按钮private JButton buttonBlur; /模糊图像按钮private JButton buttonSharpen; /锐化图像按钮private JButton buttonReset; /还原图像按钮ImagePanel imagePanel = new ImagePanel(); /创建 ImagePanel 对象用于绘制图像public BlurAndSharpenDemo() super(“图像的模糊与锐化演示“); /调用父类构造函数Container contentPane = getContentPane(); /得到容器buttonFile = new JButton(“打开图像文件“); /实例化组件buttonFile.addActionListener(this); /增加事件监听 buttonBlur = new JButton(“模糊图像“);buttonBlur.addActionListener(this); buttonSharpen = new JButton(“锐化图像“);buttonSharpen.addActionListener(this); buttonReset = new JButton(“还原图像“);buttonReset.addActionListener(this);jPanel.add(buttonBlur); /增加组件到面板上jPanel.add(buttonSharpen);jPanel.add(buttonReset);contentPane.add(jPanel, BorderLayout.SOUTH); /增加组件到容器上contentPane.add(buttonFile, BorderLayout.NORTH);contentPane.add(imagePanel, BorderLayout.CENTER);/设置窗口this.setSize(280, 230); /设置窗口大小this.setVisible(true); /设置窗口可见this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /关闭窗口时退出程序public void actionPerformed(ActionEvent e) JButton button = (JButton)e.getSource(); /获取事件源 /打开图像文件按钮 buttonFile 事件处理 if(button=this.buttonFile) JFileChooser chooser = new JFileChooser(); /实例化文件选择器chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); /设置文件打开模式为仅打开文件chooser.setCurrentDirectory(new File(“.“); /设置文件选择器当前目录/设置图像文件过滤器chooser.setFileFilter(new javax.swing.filechooser.FileFilter() public boolean accept(File file) /可接受的文件类型String name = file.getName().toLowerCase();return name.endsWith(“.gif“)| name.endsWith(“.jpg“)| name.endsWith(“.jpeg“)| file.isDirectory();public String getDescription() /文件描述return “图像文件“;);int result = chooser.showOpenDialog(this); /显示文件选择对话框if (result = JFileChooser.APPROVE_OPTION) /得到用户行为String fileName = chooser.getSelectedFile().getAbsolutePath(); /得到选择的文件名imagePanel.loadImage(fileName); /截入图像并显示 /模糊图像按钮 buttonBlur 事件处理else if(button=this.buttonBlur) imagePanel.blur(); /模糊图像buttonReset.setEnabled(true); /设置还原图像按钮可用/锐化图像按钮 buttonSharpen 事件处理 else if(button=this.buttonSharpen) imagePanel.sharpen(); /锐化图像buttonReset.setEnabled(true); /设置还原图像按钮可用/还原图像按钮 buttonBlur 事件处理else if(button=this.buttonReset) imagePanel.reset(); /还原图像buttonReset.setEnabled(false); /设置还原图像按钮不可用 public static void main(String args) new BlurAndSharpenDemo();public class ImagePanel extends JPanel Image image; /被处理的图像BufferedImage bufImage; /用于显示的缓冲区图像BufferedImage originalBufImage; /原始缓冲区图像Graphics2D g2D; /图形环境/载入图像public void loadImage(String fileName) image = this.getToolkit().getImage(fileName); /获取图像MediaTracker mt = new MediaTracker(this); /实例化媒体加载器mt.addImage(image, 0); /增加待加载图像到媒体加载器try mt.waitForAll(); /等待所有图像的加载完成 catch (Exception ex) ex.printStackTrace(); /输出出错信息/创建原始缓冲区图像originalBufImage = new BufferedImage(image.getWidth(this),image.getHeight(this),BufferedImage.TYPE_INT_ARGB);g2D = originalBufImage.createGraphics(); /创建缓冲区图像的图形环境g2D.drawImage(image, 0, 0, this); /传输源图像数据到缓冲区图像中bufImage = originalBufImage;repaint(); /重绘组件/过滤图像public void applyFilter(float data) if (bufImage = null)return; /如果 bufImage 为空则直接返回Kernel kernel = new Kernel(3, 3, data); ConvolveOp imageOp=new ConvolveOp(kernel,ConvolveOp.EDGE_NO_OP, null); /创建卷积变换操作对象BufferedImage filteredBufImage = new BufferedImage(image.getWidth(this),image.getHeight(this),BufferedImage.TYPE_INT_ARGB); /过滤后的缓冲区图像imageOp.filter(bufImage, filteredBufImage);/过滤图像,目标图像在 filteredBufImagebufImage = filteredBufImage; /让用于显示的缓冲区图像指向过滤后的图像repaint(); /重绘组件/模糊图像public void blur() if (bufImage = null)return;float data = 0.0625f, 0.125f, 0.0625f,0.125f, 0.025f, 0.125f,0.0625f, 0.125f, 0.0625f ;applyFilter(data);/锐化图像public void sharpen() if (bufImage = null)return;float data = -1.0f, -1.0f, -1.0f,-1.0f, 9.0f, -1.0f,-1.0f, -1.0f, -1.0f ;applyFilter(data);/恢复图像public void reset() if (bufImage = null)return;bufImage = originalBufImage; /g2D.drawImage(image, 0, 0, this);repaint(); /调用 paint()方法重绘组件public void paint(Graphics g) super.paintComponent(g);/如果 bufImage 非空,则在组件上绘制它if (bufImage != null) Graphics2D g2 = (Graphics2D) g;g2.drawImage(bufImage,(this.getWidth() - bufImage.getWidth() / 2, (this.getHeight() - bufImage.getHeight() / 2,this);参考算法 2:import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.GridLayout;import java.awt.Image;import java.awt.MediaTracker;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.image.BufferedIm
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号