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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。