java图形处理,java数字图像处理

  java图形处理,java数字图像处理

  导入。awt。边界布局:

  importjava.awt.Image:

  导入Java。awt。事件。行动事件:

  导入Java。awt。事件。动作监听器:

  导入Java。awt。形象。缓冲图像:

  导入Java。awt。形象。颜色模型:

  导入Java。awt。形象。记忆图像源:

  导入Java。awt。形象。像素采集器:

  导入。io。文件:

  进口。我ioexception。

  importjava.util.LinkedList:

  importjavax影像:

  importjavax。挥棒。图标

  importjavax.swing.JFileChooser(导入javax.swing.JFileChooser):

  importjavax。挥棒。窗口

  importjavax.swing.JLabel(导入javax.swing.JLabel):

  importjavax。挥棒。菜单项

  importjavax。挥棒。菜单

  importjavax。挥棒。菜单

  导入javax。挥棒。joptionpane

  importjavax。挥棒。面板

  publicsclassmyshowimageextendsjframe[

  //保存当前操作的像素矩阵

  private intcurrentpixarray[]=null:

  //图像的路径

  privateStringfileString=null:

  //用于显示图像的标签

  private jlabercimagelabel=null

  //加载的图像

  privatebufferedimagenewimage(专用缓冲区诊断程序):

  //图像的高和宽

  私人有限公司,w;

  //保存历史操作图像矩阵

  私有链接列表int[]image stack=new linklist int[]();

  private linklistint[]tempimagestack=newlinklistint[]();

  publicMyShowImage(Stringtitle)>

  超级(标题):

  这。setSize(800、600);

  这个。setdefaultcloseoperation)操作出口_开_关:

  //创建菜单

  jmenbarjb=newjmenbar();

  jmenufilemenu=newjmenu(文件);

  jb.add文件菜单:

  jmenitemopenimagemanuitem=new jmenitem(打开图像);

  文件菜单。add(openimagemenuitem);

  openimagemenuitem。addactionlistener(newopenlistener());

  JMX项目请求=newjmenitem(退出);

  fileMenu.add(要求):

  请求。addactionlistener(newactivonlistener()=)

  public void action performed(action事件)>

  系统。退出(0);

  }

  });

  jmenu操作菜单=newjmenu(图像处理);

  jb.add操作菜单);

  JMX项目rgograymenuitem=newjmenitem(灰度图像转换);

  操作菜单。add(rgbtograymenuitem);

  rgbtograymenuitem。addactionlistener(newrgbtograyactionlistener());

  JMX项目余额菜单项=newjmenitem(均衡化);

  操作菜单。添加(余额菜单项);

  平衡菜单项。addactionlistener(newbalanceapplicationlistener());

  jmenunfrontandbackmenu=new jmenu(历史操作);

  JB。add(front bandackmenu);

  JMX项目backmenuitem=newjmenitem(后退);

  frontendackmenu。add(back menuitem);

  backmenuitem。addactionlistener(newbackactionlistener());

  jmenmentfront菜单项=newjmenitem(前进);

  frontendackmenu。add(frontemenuitem);

  frontemenuitem。addactionlistener(newfronteactionlistener());

  这。setjmenbar(JB);

  image label=new jlabel( );

  jscrollpane=newjscrollpane(图像标签);

  这。添加(面包,边布置)。(三)中心;

  这个。设置可见(真);

  }

  私有类openlistermentsactionlistener[

  public void action performed(action事件)>

  jfile chooser JC=newjfile chooser();

  内向值=JC。showopendialog(零);

  如果(返回值==JFileChooser).批准_选项。]

  fileselectedfile=JC。getselectedfile();

  if(selectedFile!=空)

  filestring=选定的文件。getabsolutesh();

  尝试[

  新图像=图像。read(新文件(文件字符串));

  w=新图像。get width();

  h=新图像。获取height();

  current pixarray=get ixarray(新图像,w,h);

  imageStack.clear():

  tempImageStack.clear():

  图像堆栈。添加最后一个(当前像素阵列):

  图像标签。setcon(new image icon(new image));

  } catch(ioexceptionax)}

  System.out.println(前);

  }

  }

  }

  我的showimage。这个。repaint();

  //MyShowImage.this.pack():

  }

  }

  我的天啊菜单监听器/////////////

  私有类btograyactionlisterementsactionlistener[

  public void action performed(action事件)>

  int[]result array=rgbtogray(当前pix array);

  imageStack.addLast(结果阵列):

  currentpixarray=resultarray结果数组:

  显示图像(结果阵列):

  tempImageStack.clear():

  }

  }

  私有类balanceactionlistener[

  public void action performed(action事件)>

  int[]resultArray=balance(当前像素阵列):

  imageStack.addLast(结果阵列):

  currentpixarray=resultarray结果数组:

  显示图像(结果阵列):

  tempImageStack.clear():

  }

  }

  私有类backactionlistener mobilink侦听器[

  public void action performed(action事件)>

  if(imageStack.size()=1)>

  joptionpane。showmessagedialog(null,此幅图片的处理已经没有后退历史操作了-是啊提示-是啊

  乔普顿.信息_消息:

  }否则

  tempimagestack。添加最后一个(图像堆栈。remove last());

  当前像素阵列=图像堆栈。get ast();

  showImage(currentPixArray):

  }

  }

  }

  私有类前端操作侦听器复杂侦听器[

  public void action performed(action事件)>

  if(tempImageStack.size() 1)>

  joptionpane。showmessagedialog(null,此幅图片的处理已经没有前进历史操作了-是啊提示-是啊

  乔普顿.信息_消息:

  }否则

  current pixarray=tempimagestack。remove first();

  图像堆栈。添加最后一个(当前像素阵列):

  showImage(currentPixArray):

  }

  }

  }

  我的天啊获取图像像素矩阵//////////

  private int[]get ixarray(image im、intw、inth)}

  int[]pix=new int[w * h];

  像素蚀刻pg=空:

  尝试[

  pg=newpixel graber(im,0,0,w,h,pix,0,w);

  如果(第。gra像素()!=真)

  尝试[

  thrownewjava。awt。awteexception( pgerror pg。status());

  }catch(异常)}

  情商。printstacktrace();

  }

  }catch(异常)}

  例如printStackTrace():

  }

  返回图片:

  }

  我的天啊显示图片/////////////

  private void show image(int[]src pix array)}

  imagepic=create image(new memory image source(w,h,srcPixArray,0,w));

  imageiconic=new imageicon(pic);

  图像标签。setcon(集成电路);

  imageLabel.repaint():

  }

  我的天啊灰度转换/////////////

  private int[]RGB togray[int[]image source]

  内部[]grayar ray=new int[h * w];

  colormodelcolormodel=颜色模型。SVG默认值();

  页:1:

  for(I=0);I h;>

  for(j=0);j w;j .]

  k=I * w j;

  r=颜色模型。getred(图片来源[k]);

  g=颜色模型。getgreen(图片来源[k]);

  b=颜色模型。getblue(图片来源[k]);

  int gray=(int)(r * 0.3g * 0.59 b * 0.11);

  r=g=b=灰色;

  grayar ray[I * w j]=(255 24)(r16)(G8) b;

  }

  }

  让雷回来:

  }

  我的天啊图像均衡化/////////////

  私有int[]balance(int[]src pix array)}

  int[]histogram=new int[256];

  int[]dinpixarray=new int[w * h];

  for(inti=0);I h;>

  for(intj=0);j w;j .]

  int grey=src pix array[I * w j]0x ff;

  直方图[灰色];

  }

  }

  double=(double)255/(w * h);

  double[]c=new double[256];

  c[0]=(a *直方图[0]);

  for(inti=1);i256>

  c[I]=c[I-1](int)(a *直方图[I]);

  }

  for(inti=0);I h;>

  for(intj=0);j w;j .]

  int grey=src pix array[I * w j]0x 0000 ff;

  inthist=(int)c[灰色];

  dinpixarray[I * w j]=255 24 hist 16 hist 8 hist;

  }

  }

  returndinpixarray

  }

  publicstaticvoidmain(字符串[]args)>

  newMyShowImage(ShowImage ):

  }

  }

  #程序暂时只提供图像的灰度转换和直方图的均衡化,有很多地方还需要

  完善

  #程序能够处理多种格式的图像,如bmp、jpg、jpeg、gif等

  转自:http://嗨。百度一下。com/贤le/blog/item/6366 a3 EC 30429d 2463 d09 F6

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: