对图像进行水平镜像和垂直镜像!
来源:互联网 发布:云计算开源框架 编辑:程序博客网 时间:2024/04/23 16:30
//Mirror.java/* 程序说明:对图像进行水平镜像和垂直镜像! 最后修改时间:2003-12 作者:haibin */ import java.awt.*;import java.awt.event.*;import java.awt.image.*;import javax.swing.*; public class Mirror extends Frame { Image im,tmp; int iw,ih; int[] pixels; boolean flagLoad=false; public Mirror(){ this.setTitle("图像的水平和垂直镜像"); Panel pdown; Button load,horizon,vertical,quit; //添加窗口监听事件 addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); pdown = new Panel(); pdown.setBackground(Color.lightGray); load=new Button("加载图像"); horizon=new Button("水平镜像"); vertical= new Button("垂直镜像"); quit=new Button("退出"); this.add(pdown,BorderLayout.SOUTH); pdown.add(load); pdown.add(horizon); pdown.add(vertical); pdown.add(quit); load.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ jLoad_ActionPerformed(e); } }); horizon.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ jHorizon_ActionPerformed(e); } }); vertical.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ jVertical_ActionPerformed(e); } }); quit.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ jQuit_ActionPerformed(e); } }); } public void jLoad_ActionPerformed(ActionEvent e){ //利用MediaTracker跟踪图像的加载 MediaTracker tracker = new MediaTracker(this); im=Toolkit.getDefaultToolkit().getImage("Miss.jpg"); tracker.addImage(im,0); //等待图像的完全加载 try{ tracker.waitForID(0); }catch(InterruptedException e2){ e2.printStackTrace();} //获取图像的宽度iw和高度ih iw=im.getWidth(this); ih=im.getHeight(this); pixels=new int[iw*ih]; try{ PixelGrabber pg=new PixelGrabber(im,0,0,iw,ih,pixels,0,iw); pg.grabPixels(); }catch (InterruptedException e3) { e3.printStackTrace(); } //将数组中的象素产生一个图像 ImageProducer ip=new MemoryImageSource(iw,ih,pixels,0,iw); tmp=createImage(ip); flagLoad=true; repaint(); } public void jHorizon_ActionPerformed(ActionEvent e){ if(flagLoad){ //可以进行连续的镜像! /* try{ PixelGrabber pg=new PixelGrabber(im,0,0,iw,ih,pixels,0,iw); pg.grabPixels(); }catch (InterruptedException e3) { e3.printStackTrace(); } */ //对图像进行水平镜像,Alpha值保持不变 int [] tempPixels=new int[iw*ih]; for(int i=0;i<iw*ih;i++) { tempPixels[i]=pixels[i]; } for(int i=0;i<ih;i++) { for(int j=0;j<iw;j++) { //核心算法:第一列变为最后一列 pixels[i*iw+j]=tempPixels[i*iw+(iw-j-1)]; } } //将数组中的象素产生一个图像 ImageProducer ip=new MemoryImageSource(iw,ih,pixels,0,iw); tmp=createImage(ip); repaint(); }else{ JOptionPane.showMessageDialog(null,"请先打开一幅图片!", "Alert",JOptionPane.WARNING_MESSAGE); } } public void jVertical_ActionPerformed(ActionEvent e){ if(flagLoad){ //可以进行连续的镜像 /* try{ PixelGrabber pg=new PixelGrabber(im,0,0,iw,ih,pixels,0,iw); pg.grabPixels(); }catch (InterruptedException e3) { e3.printStackTrace(); } */ //对图像进行垂直镜像,Alpha值保持不变 int [] tempPixels=new int[iw*ih]; for(int i=0;i<iw*ih;i++) { tempPixels[i]=pixels[i]; } for(int i=0;i<ih;i++) { for(int j=0;j<iw;j++) { //核心算法:第一行变为最后一行 pixels[i*iw+j]=tempPixels[(ih-i-1)*iw+j]; } } //将数组中的象素产生一个图像 ImageProducer ip=new MemoryImageSource(iw,ih,pixels,0,iw); tmp=createImage(ip); repaint(); }else{ JOptionPane.showMessageDialog(null,"请先打开一幅图片!", "Alert",JOptionPane.WARNING_MESSAGE); } } //程序退出 public void jQuit_ActionPerformed(ActionEvent e){ //System.exit(0); JOptionPane op =new JOptionPane(); int exit=op.showConfirmDialog(this,"你要退出吗? ? ?","退出",JOptionPane.YES_NO_OPTION); if(exit==JOptionPane.YES_OPTION) { System.exit(0); }else{ } } //调用paint()方法,显示图像信息。 public void paint(Graphics g){ if(flagLoad){ g.drawImage(tmp,10,20,this); } else{ } } //定义main方法,设置窗口的大小,显示窗口 public static void main(String[] args) { Mirror mirror = new Mirror(); mirror.setLocation(50,50); mirror.setSize(500,400); mirror.show(); } }
- 对图像进行水平镜像和垂直镜像!
- 将矩阵进行水平镜像和垂直镜像
- 【VC图像处理】 图像水平镜像,垂直镜像,图像转置
- 图像镜像之水平镜像
- 使用Matrix对bitmap的旋转和镜像水平垂直翻转
- 用OpenCV实现图像的水平镜像(翻转)变换和竖直镜像(翻转)变换(垂直镜像变换)的源码
- matlab 矩阵/图片的水平镜像和垂直镜像
- C++批量对图片进行水平镜像、切片、旋转、添加椒盐噪声(小样本学习中图像扩充)
- 如何使用Matrix对bitmap的旋转与镜像水平垂直翻转
- 如何使用Matrix对bitmap的旋转与镜像水平垂直翻转
- OPENCV入门教程五:flip垂直水平镜像
- Altium Designer13原理图中元件垂直、水平镜像翻转
- 8位、24位原图数据(RAW)反像、水平镜像、垂直镜像算法实现 .
- 对bitmap进行旋转和镜像操作
- Win8Metro(C#)数字图像处理--2.20图像垂直镜像
- Win8Metro(C#)数字图像处理--2.19图像水平镜像
- rgb图像镜像(水平)MATLAB程序
- Python实现图像平移、旋转、水平镜像等
- 日常用语--恋爱结婚--笔记
- 两个简单的分页存储过程
- 日常用语--恋爱结婚
- Java 实现生产者消费者(二)
- 面试感悟
- 对图像进行水平镜像和垂直镜像!
- [Boston Legal][S02E02]Allan Shore在Kelly Nolan被控杀夫一案中的结案陈词
- 数组长度计算
- 必须掌握的八个【cmd 命令行】
- ASP.NET跨页面传值技巧
- [Boston Legal][S02E02]Shirley Schmidt在校园巫女一案中的结案陈词
- [Boston Legal][S02E04]Allan Shore在牺牲美兵一案中的结案陈词
- web service技术
- [Boston Legal][S02][E05]Denise Bauer在皮卡车一案中的开案陈词