收藏 分享(赏)

图形的模糊与锐化参考算法精品资料.docx

上传人:风样花鼓 文档编号:21124539 上传时间:2023-07-07 格式:DOCX 页数:26 大小:107.75KB
下载 相关 举报
图形的模糊与锐化参考算法精品资料.docx_第1页
第1页 / 共26页
图形的模糊与锐化参考算法精品资料.docx_第2页
第2页 / 共26页
图形的模糊与锐化参考算法精品资料.docx_第3页
第3页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、您的位置:咨询直通车岗位入门知识IT类JAVA例子模糊与锐化 发布时间: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(); /面板jPa

2、nel用于容纳模糊、锐化、还原图像按钮private JButton buttonFile; /打开图像文件按钮private JButton buttonBlur; /模糊图像按钮private JButton buttonSharpen; /锐化图像按钮private JButton buttonReset; /还原图像按钮ImagePanel imagePanel = new ImagePanel(); /创建ImagePanel对象用于绘制图像public BlurAndSharpenDemo() super(图像的模糊与锐化演示); /调用父类构造函数Container conten

3、tPane = getContentPane(); /得到容器buttonFile = new JButton(打开图像文件); /实例化组件buttonFile.addActionListener(this); /增加事件监听buttonBlur = new JButton(模糊图像);buttonBlur.addActionListener(this);buttonSharpen = new JButton(锐化图像);buttonSharpen.addActionListener(this);buttonReset = new JButton(还原图像);buttonReset.addA

4、ctionListener(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.setVi

5、sible(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.setFileSelectio

6、nMode(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(

7、.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

8、); /截入图像并显示 /模糊图像按钮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.bu

9、ttonReset) 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; /图形环境/载入图

10、像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 Buff

11、eredImage(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;

12、/如果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, fil

13、teredBufImage);/过滤图像,目标图像在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 (bufIma

14、ge = 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.paintCompone

15、nt(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

16、;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.BufferedImage;import java.awt.image.ConvolveOp;import java.awt.image.Kernel;

17、import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;public class SharpenFuzzy extends JFrame private JPanel contentPane;private BorderLayout borderLayout1 = new BorderLayout();/ 添加的组件private JPanel jpanel = new JPanel();private JButton jb1 = new JButton();private JButton j

18、b2 = new JButton();private JButton jb3 = new JButton();private GridLayout gridLayout = new GridLayout();/ 创建ShowPanel类的实例PanelDemo pd = new PanelDemo();public void initial() / 设置各组件的属性contentPane = (JPanel) this.getContentPane();contentPane.setLayout(borderLayout1);this.setSize(new Dimension(380, 55

19、0);this.setTitle(图像的明暗处理演示);jb1.setFont(new Font(Dialog, Font.BOLD, 13);jb1.setText(Sharp Image);jb1.addActionListener(new ActionListener() / 添加事件监听器public void actionPerformed(ActionEvent e) jb1_actionPerformed(e););jb2.setFont(new Font(Dialog, Font.BOLD, 13);jb2.setText(Biur Image);jb2.addActionLi

20、stener(new ActionListener() / 添加事件监听器public void actionPerformed(ActionEvent e) jb2_actionPerformed(e););jb3.setFont(new Font(Dialog, Font.BOLD, 13);jb3.setText(Reset);jb3.addActionListener(new ActionListener() / 添加事件监听器public void actionPerformed(ActionEvent e) jb3_actionPerformed(e););jpanel.setLa

21、yout(gridLayout);jpanel.add(jb1, null);jpanel.add(jb2, null);jpanel.add(jb3, null);contentPane.add(jpanel, BorderLayout.SOUTH);/ 在窗口中部添加ShowPanel面板contentPane.add(pd, BorderLayout.CENTER);this.setVisible(true);public void jb1_actionPerformed(ActionEvent e) pd.sharpImage();/ 调用锐化方法pd.repaint();/ 绘制锐化

22、后的图像public void jb2_actionPerformed(ActionEvent e) pd.blurImage();/ 调用模糊方法pd.repaint();/ 绘制模糊后的图像public void jb3_actionPerformed(ActionEvent e) pd.reset();/ 缓冲区图像为源图像pd.repaint();/ 绘制源图像public static void main(String args) new SharpenFuzzy().initial();class PanelDemo extends JPanel private BorderLay

23、out borderLayout = new BorderLayout();/ 定义新属性Image image;/ 源图像BufferedImage bi1;/ 缓冲区图像BufferedImage bi2;/ 缓冲区图像BufferedImage bi3;/ 缓冲区图像Graphics2D g2d;/ 图像上下文public PanelDemo() this.setLayout(borderLayout);loadImage();/ 加载图片createBufferedImage();/ 创建缓冲区图像bi1 = bi2;this.setSize(new Dimension(image.g

24、etWidth(this), image.getHeight(this);/ 设置面板大小public void loadImage() / 加载图片image = this.getToolkit().getImage(/这里如果不填写一个存在的图片,程序会抛出空指针异常ClassLoader.getSystemResource(chaojikatong.jpg);/ 创建Image对象MediaTracker mt = new MediaTracker(this);mt.addImage(image, 0);try mt.waitForAll(); catch (Exception e) e

25、.printStackTrace();/ 表示加载失败if (image.getWidth(this) = -1) System.out.println(不能创建图象);/ 如果不存在退出程序System.exit(1);public void createBufferedImage() / 根据image对象创建一个缓冲区图像bi2 = new BufferedImage(image.getWidth(this), image.getHeight(this),BufferedImage.TYPE_INT_ARGB);/ 向缓冲区图像中输入原image对象的图象数据g2d = bi2.crea

26、teGraphics();g2d.drawImage(this.image, 0, 0, this);/ 绘制缓冲区图像/ 创建另一个空的缓冲区图像,大小和类型相同的bi3bi3 = new BufferedImage(image.getWidth(this), image.getHeight(this),BufferedImage.TYPE_INT_ARGB);public void sharpImage() / 锐化图像的方法float data = -1.0f, -1.0f, -1.0f, 10.f, -1.0f, -1.0f, -1.0f, -1.0f ;Kernel kernel =

27、 new Kernel(3, 3, data);ConvolveOp co = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);/ 创建卷积过滤器co.filter(bi2, bi3);/ 将存储源图像的缓冲区图像的数据经卷积过滤器处理后进入另一个缓冲区bi1 = bi3;/ bi1指向处理后的图像缓冲区bi3public void blurImage() / 模糊图像的方法float data = 0.0625f, 0.125f, 0.0625f, 0.125f, 0.25f, 0.125f,0.0625f, 0.125f, 0.062

28、5f ;Kernel kernel = new Kernel(3, 3, data);ConvolveOp co = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);/ 创建卷积过滤器co.filter(bi2, bi3);/ 将存储源图像的缓冲区图像的数据经卷积过滤器处理后进入另一个缓冲区bi1 = bi3;/ bi1指向处理后的图像缓冲区bi3public void reset() g2d.setColor(Color.black);g2d.clearRect(0, 0, image.getWidth(this), image.get

29、Height(this);g2d.drawImage(this.image, 0, 0, this);/ 绘制缓冲区图像/ 令bi1对象指向源图像存储的bi2缓冲区图像bi1 = bi2;public void paintComponent(Graphics g) super.paintComponent(g);Graphics2D g2d = (Graphics2D) g;g2d.drawImage(bi1, 0, 0, this);public void update(Graphics g) g.clearRect(0, 0, this.getWidth(), this.getHeight

30、();this.paintComponent(g);附录资料:java处理高并发高负载类网站的优化方法java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据)一:高并发高负载类网站关注点之数据库没错,首先是数据库,这是大多数应用所面临的首个SPOF。尤其是Web2.0的应用,数据库的响应是首先要解决的。一般来说MySQL是最常用的,可能最初是一个mysql主机,当数据增加到100万以上,那么,MySQL的效能急剧下降。常用的优化措施是M-S(主-从)方式进行同步复制,将查询和操作和分别在不同的服务器上进行操作。我推荐的是M-M-Slaves方式

31、,2个主Mysql,多个Slaves,需要注意的是,虽然有2个Master,但是同时只有1个是Active,我们可以在一定时候切换。之所以用2个M,是保证M不会又成为系统的SPOF。Slaves可以进一步负载均衡,可以结合LVS,从而将select操作适当的平衡到不同的slaves上。以上架构可以抗衡到一定量的负载,但是随着用户进一步增加,你的用户表数据超过1千万,这时那个M变成了SPOF。你不能任意扩充Slaves,否则复制同步的开销将直线上升,怎么办?我的方法是表分区,从业务层面上进行分区。最简单的,以用户数据为例。根据一定的切分方式,比如id,切分到不同的数据库集群去。全局数据库用于me

32、ta数据的查询。缺点是每次查询,会增加一次,比如你要查一个用户nightsailer,你首先要到全局数据库群找到nightsailer对应的cluster id,然后再到指定的cluster找到nightsailer的实际数据。每个cluster可以用m-m方式,或者m-m-slaves方式。这是一个可以扩展的结构,随着负载的增加,你可以简单的增加新的mysql cluster进去。需要注意的是:1、禁用全部auto_increment的字段2、id需要采用通用的算法集中分配3、要具有比较好的方法来监控mysql主机的负载和服务的运行状态。如果你有30台以上的mysql数据库在跑就明白我的意思

33、了。4、不要使用持久性链接(不要用pconnect),相反,使用sqlrelay这种第三方的数据库链接池,或者干脆自己做,因为php4中mysql的链接池经常出问题。二:高并发高负载网站的系统架构之HTML静态化其实大家都知道,效率最高、消耗最小的就是纯静态化,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是 最有效的方法。但是对于大量内容并且频繁更新的网站,我们无法全部手动去挨个实现,于是出现了我们常见的信息发布系统CMS,像我们常访问的各个门户站点 的新闻频道,甚至他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最简单的信息录入自动生成

34、静态页面,还能具备频道管理、权限 管理、自动抓取等功能,对于一个大型网站来说,拥有一套高效、可管理的CMS是必不可少的。除了门户和信息发布类型的网站,对于交互性要求很高的社区类型网站来说,尽可能的静态化也是提高性能的必要手段,将社区内的帖子、文章进行实时的静态化,有更新的时候再重新静态化也是大量使用的策略,像Mop的大杂烩就是使用了这样的策略,网易社区等也是如此。 同时,html静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以考虑使用html静态化来实现,比如论坛 中论坛的公用设置信息,这些信息目前的主流论坛都可以进行后台管理并且存储再数据库中,这些信

35、息其实大量被前台程序调用,但是更新频率很小,可以考虑将这 部分内容进行后台更新的时候进行静态化,这样避免了大量的数据库访问请求高并发。网站HTML静态化解决方案当一个Servlet资源请求到达WEB服务器之后我们会填充指定的JSP页面来响应请求:HTTP请求-Web服务器-Servlet-业务逻辑处理-访问数据-填充JSP-响应请求HTML静态化之后:HTTP请求-Web服务器-Servlet-HTML-响应请求静态访求如下Servlet:public void doGet(HttpServletRequest request, HttpServletResponse response) th

36、rows ServletException, IOException if(request.getParameter(chapterId) != null) String chapterFileName = bookChapterRead_+request.getParameter(chapterId)+.html; String chapterFilePath = getServletContext().getRealPath(/) + chapterFileName; File chapterFile = new File(chapterFilePath); if(chapterFile.

37、exists()response.sendRedirect(chapterFileName);return;/如果有这个文件就告诉浏览器转向 INovelChapterBiz novelChapterBiz = new NovelChapterBizImpl(); NovelChapter novelChapter = novelChapterBiz.searchNovelChapterById(Integer.parseInt(request.getParameter(chapterId);/章节信息 int lastPageId = novelChapterBiz.searchLastCH

38、apterId(novelChapter.getNovelId().getId(), novelChapter.getId(); int nextPageId = novelChapterBiz.searchNextChapterId(novelChapter.getNovelId().getId(), novelChapter.getId(); request.setAttribute(novelChapter, novelChapter); request.setAttribute(lastPageId, lastPageId); request.setAttribute(nextPage

39、Id, nextPageId); new CreateStaticHTMLPage().createStaticHTMLPage(request, response, getServletContext(), chapterFileName, chapterFilePath, /bookRead.jsp); 生成HTML静态页面的类:package com.jb.y2t034.thefifth.web.servlet;import java.io.ByteArrayOutputStream;import java.io.FileOutputStream;import java.io.IOExc

40、eption;import java.io.OutputStreamWriter;import java.io.PrintWriter;import javax.servlet.RequestDispatcher;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSer

41、vletResponse;import javax.servlet.http.HttpServletResponseWrapper;/* 创建HTML静态页面* 功能:创建HTML静态页面* 时间:2009年1011日* 地点:home* author mavk*/public class CreateStaticHTMLPage /* * 生成静态HTML页面的方法 * param request 请求对象 * param response 响应对象 * param servletContext Servlet上下文 * param fileName 文件名称 * param fileFul

42、lPath 文件完整路径 * param jspPath 需要生成静态文件的JSP路径(相对即可) * throws IOException * throws ServletException */ public void createStaticHTMLPage(HttpServletRequest request, HttpServletResponse response,ServletContext servletContext,String fileName,String fileFullPath,String jspPath) throws ServletException, IOException response.setContentType(text/html;charset=gb2312);/设置HTML结果流编码(即HTML文件编码) RequestDispatcher rd = servletContext.getRequestDispatcher(jspPath);/得到JSP资源 final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();/用于从ServletOutputStream中接收资源 final ServletOutputStream ser

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > 其他相关文档

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报