图片处理技术.docx
- 文档编号:7093693
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:16
- 大小:19.47KB
图片处理技术.docx
《图片处理技术.docx》由会员分享,可在线阅读,更多相关《图片处理技术.docx(16页珍藏版)》请在冰豆网上搜索。
图片处理技术
packagegraphics;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.awt.Image.*;
importjava.io.*;
importjava.awt.image.*;
importjava.awt.*;
importjava.util.*;
importcom.sun.image.codec.jpeg.JPEGCodec;
importcom.sun.image.codec.jpeg.JPEGImageEncoder;
importjavax.imageio.*;
publicclassFrame1extendsJFrame{
finalstaticint R=2;
finalstaticint G=1;
finalstaticint B=0;
finalstaticint ALPHA=3;
JPanelcontentPane;
BorderLayoutborderLayout1=newBorderLayout();
MenuBarmenuBar1=newMenuBar();
Menumenu1=newMenu();
MenuItemmenuItem1=newMenuItem();
Menumenu2=newMenu();
MenuItemmenuItem2=newMenuItem();
JLabellb=newJLabel();
JPanelpl=newJPanel();
MenuItemmenuItem3=newMenuItem();
//主图像路径
StringstrFile=null;
Stringdir=null;
//印章图像路径
StringstrSealFile=null;
StringsealDir=null;
MenuItemmenuItem4=newMenuItem();
//主图像的像素数组
intpixArray[]=null;
intrArray[][]=null;
intgArray[][]=null;
intbArray[][]=null;
intalpArray[][]=null;
//定义印章图像的像素数组
intsealPixArray[]=null;
intsealRArray[][]=null;
intsealGArray[][]=null;
intsealBArray[][]=null;
//主图像高、宽
inth,w;
//印章图像高、宽
intsealH,sealW;
MenuItemmenuItem5=newMenuItem();
MenuItemmenuItem6=newMenuItem();
MenuItemmenuItem7=newMenuItem();
MenuItemmenuItem8=newMenuItem();
MenuItemmenuItem9=newMenuItem();
MenuItemmenuItem10=newMenuItem();
Menumenu3=newMenu();
MenuItemmenuItem11=newMenuItem();
publicFrame1(){
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try{
jbInit();
}
catch(Exceptione){
e.printStackTrace();
}
}
privatevoidjbInit()throwsException {
contentPane=(JPanel)this.getContentPane();
contentPane.setLayout(borderLayout1);
this.setSize(newDimension(400,300));
this.setTitle("Pic");
menu1.setLabel("File");
menuItem1.setLabel("open");
menuItem1.addActionListener(newFrame1_menuItem1_actionAdapter(this));
menu2.setLabel("Edit");
menuItem2.setLabel("toBandW");
menuItem2.addActionListener(newFrame1_menuItem2_actionAdapter(this));
//menuItem2.addActionListener(newFrame1_menuItem2_actionAdapter(this));
menuItem3.setLabel("zhifangtujunyun");
menuItem3.addActionListener(newFrame1_menuItem3_actionAdapter(this));
//menuItem3.addActionListener(newFrame1_menuItem3_actionAdapter(this));
menuItem4.setLabel("RGBtoGray");
menuItem4.addActionListener(newFrame1_menuItem4_actionAdapter(this));
menuItem5.setLabel("linearRange");
menuItem5.addActionListener(newFrame1_menuItem5_actionAdapter(this));
menuItem6.setLabel("addSeal");
menuItem6.addActionListener(newFrame1_menuItem6_actionAdapter(this));
menuItem7.setLabel("addSeals");
menuItem7.addActionListener(newFrame1_menuItem7_actionAdapter(this));
menuItem8.setLabel("toHalf");
menuItem8.addActionListener(newFrame1_menuItem8_actionAdapter(this));
menuItem9.setLabel("save");
menuItem9.addActionListener(newFrame1_menuItem9_actionAdapter(this));
menuItem10.setLabel("exit");
menuItem10.addActionListener(newFrame1_menuItem10_actionAdapter(this));
menu3.setLabel("Help");
menuItem11.setLabel("about");
menuItem11.addActionListener(newFrame1_menuItem11_actionAdapter(this));
menuBar1.add(menu1);
menuBar1.add(menu2);
menuBar1.add(menu3);
menu1.add(menuItem1);
menu1.add(menuItem9);
menu1.add(menuItem10);
menu2.add(menuItem2);
menu2.add(menuItem3);
menu2.add(menuItem4);
menu2.add(menuItem5);
menu2.add(menuItem6);
menu2.add(menuItem7);
menu2.add(menuItem8);
setMenuBar(menuBar1);
contentPane.add(pl,BorderLayout.CENTER);
pl.add(lb);
menu3.add(menuItem11);
}
protectedvoidprocessWindowEvent(WindowEvente){
super.processWindowEvent(e);
if(e.getID()==WindowEvent.WINDOW_CLOSING){
System.exit(0);
}
}
voidmenuItem1_actionPerformed(ActionEvente){
FileDialogfd=newFileDialog(this,"Open");
fd.show();
if(fd.getFile()!
=null){
strFile=fd.getFile();
dir=fd.getDirectory();
}
ImageIconsource=newImageIcon(dir+strFile);
h=source.getIconHeight();
w=source.getIconWidth();
lb.setIcon(source);
lb.repaint();
//为什么下面的代码,需要对rgb,alp数组进行初始化,而不需要对pixArray进行初始化?
rArray=newint[h][w];
gArray=newint[h][w];
bArray=newint[h][w];
alpArray=newint[h][w];
pixArray=getPixArray(dir+strFile,w,h);
rArray=getColorArray(pixArray,w,h,R);
gArray=getColorArray(pixArray,w,h,G);
bArray=getColorArray(pixArray,w,h,B);
alpArray=getColorArray(pixArray,w,h,ALPHA);
}
voidmenuItem4_actionPerformed(ActionEvente){
Imageim=Toolkit.getDefaultToolkit().getImage(dir+strFile);
//inth=im.getHeight(null);
//intw=im.getWidth(null);
int[][]graArray=newint[h][w];
//getPixArray(dir+strFile);
//getRArray(pixArray);
///getGArray(pixArray);
//getBArray(pixArray);
//getAlpArray(pixArray);
graArray=RGBtoGray(rArray,gArray,bArray,w,h);
Imagepic=createImage(newMemoryImageSource(w,h,arrayTransform(graArray,w,h),0,w));
ImageIconic=newImageIcon(pic);
lb.setIcon(ic);
lb.repaint();
}
publicstaticvoidmain(Stringargs[])
{
newFrame1().show();
}
publicint[][]getGrayArray(int[][]r,int[][]g,int[][]b,intw,inth)
{
intgray[][];
gray=newint[h][w];
for(inti=0;i { for(intj=0;j { gray[i][j]=(int)(r[i][j]*0.3+g[i][j]*0.59+b[i][j]*0.11); } } return gray; } publicint[]getPixArray(Stringpath,intw,inth) { Imageim=Toolkit.getDefaultToolkit().getImage(path); int[]pix=newint[w*h]; PixelGrabberpg=null; try{ pg=newPixelGrabber(im,0,0,w,h,pix,0, w); if(pg.grabPixels()! =true) try{ thrownewjava.awt.AWTException("pgerror"+pg.status()); }catch(Exceptioneq) { eq.printStackTrace(); } }catch(Exceptionex){ ex.printStackTrace(); } returnpix; } publicint[][]getColorArray(int[]sourceArray,intw,inth,int color) { intindex=0; int[][]array=newint[h][w]; for(inti=0;i { for(intj=0;j { array[i][j]=(sourceArray[index]>>color*8)&0xff; index++; } } returnarray; } publicint[]linearRange(int[]grayArray,doublea,doubleb) { int[]grArray=newint[grayArray.length]; for(inti=0;i { grArray[i]=(int)(grayArray[i]*a-b); if(grArray[i]<0) grArray[i]=0; if(grArray[i]>255) grArray[i]=255; } returngrArray; } publicint[][]RGBtoGray(int[][]r,int[][]g,int[][]b,intw,inth) { int[][]gray=newint[h][w]; gray=getGrayArray(r,g,b,w,h); for(inti=0;i { for(intj=0;j { gray[i][j]=(255<<24)|gray[i][j]<<16|gray[i][j]<<8|gray[i][j]; } } returngray; } publicint[]RGBtoBW(int[][]r,int[][]g,int[][]b,intp) { int[][]gray=newint[h][w]; gray=getGrayArray(r,g,b,w,h); for(inti=0;i { for(intj=0;j if(gray[i][j] else gray[i][j]=255; } } return arrayTransform(gray,w,h); } //直方图均匀化 publicint[]zftjy(int[]gr) { double[]v=newdouble[256]; intpixel=w*h; double[]hs=newdouble[256];//计算每个灰度级的像素个数在整个图像中所占的百分比 double[]hp=newdouble[256];//计算图像各灰度级的累计分布hp int[]gray=newint[gr.length];//直方图匀化后的像素矩阵 //求出原图f的灰度直方图, for(inti=0;i { v[gr[i]]++; } for(inti=0;i<256;i++) { hs[i]=v[i]/pixel; } for(inti=0;i<256;i++) { for(intj=0;j<=i;j++) { hp[i]=hp[i]+hs[j]; } } hp[0]=0; for(inti=0;i { gray[i]=(int)(255*hp[gr[i]]); } returngray; } voidmenuItem5_actionPerformed(ActionEvente){ int[]gray=arrayTransform(getGrayArray(rArray,gArray,bArray,w,h),w,h); gray=linearRange(gray,1.2,20); for(inti=0;i { gray[i]=(255<<24)|(gray[i]<<16)|(gray[i]<<8)|gray[i]; } Imageim=createImage(newMemoryImageSource(w,h,gray,0,w)); lb.setIcon(newImageIcon(im)); lb.repaint(); } /*publicvoid arrayInit(Stringpath) { pixArray=getPixArray(path,w,h); getRArray(pixArray,w,h); getGArray(pixArray,w,h); getBArray(pixArray,w,h); getAlpArray(pixArray,w,h); }*/ voidmenuItem2_actionPerformed(ActionEvente){ int[]gray=RGBtoBW(rArray,gArray,bArray,150); for(inti=0;i { gray[i]=(255<<24)|(gray[i]<<16)|(gray[i]<<8)|gray[i]; } Imageim=createImage(newMemoryImageSource(w,h,gray,0,w)); lb.setIcon(newImageIcon(im)); lb.repaint(); } voidmenuItem3_actionPerformed(ActionEvente){ int[]gray=zftjy(arrayTransform(getGrayArray(rArray,gArray,bArray,w,h),w,h)); //gray=linearRange(gray,1.2,20); for(inti=0;i { gray[i]=(255<<24)|(gray[i]<<16)|(gray[i]<<8)|gray[i]; } Imageim=createImage(newMemoryImageSource(w,h,gray,0,w)); lb.setIcon(newImageIcon(im)); lb.repaint(); } publicvoidgetSealDimension(Stringpath) { ImageIconsource=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图片 处理 技术
![提示](https://static.bdocx.com/images/bang_tan.gif)