




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA图像缩放处理 今天在网上看到了一篇关于JAVA图像处理的文章,博主贴出了一个处理类:特点是高品质缩小,具体代码如下:importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjavax.imageio.ImageIO;publicclassImageScaleprivateintwidth;privateintheight;privateintscaleWidth;doublesupport=(double)3.0;doublecontrib;doublenormContrib;doubletmpContrib;intstartContrib,stopContrib;intnDots;intnHalfDots;publicBufferedImageimageZoomOut(BufferedImagesrcBufferImage,intw,inth,booleanlockScale)width=srcBufferImage.getWidth();height=srcBufferImage.getHeight();scaleWidth=w;if(lockScale)h=w*height/width;if(DetermineResultSize(w,h)=1)returnsrcBufferImage;CalContrib();BufferedImagepbOut=HorizontalFiltering(srcBufferImage,w);BufferedImagepbFinalOut=VerticalFiltering(pbOut,h);returnpbFinalOut;/*/*决定图像尺寸*/privateintDetermineResultSize(intw,inth)doublescaleH,scaleV;scaleH=(double)w/(double)width;scaleV=(double)h/(double)height;/需要判断一下scaleH,scaleV,不做放大操作if(scaleH=1.0&scaleV=1.0)return1;return0;/endofDetermineResultSize()privatedoubleLanczos(inti,intinWidth,intoutWidth,doubleSupport)doublex;x=(double)i*(double)outWidth/(double)inWidth;returnMath.sin(x*Math.PI)/(x*Math.PI)*Math.sin(x*Math.PI/Support)/(x*Math.PI/Support);/endofLanczos()/Assumption:samehorizontalandverticalscalingfactor/privatevoidCalContrib()nHalfDots=(int)(double)width*support/(double)scaleWidth);nDots=nHalfDots*2+1;trycontrib=newdoublenDots;normContrib=newdoublenDots;tmpContrib=newdoublenDots;catch(Exceptione)System.out.println(initcontrib,normContrib,tmpContrib+e);intcenter=nHalfDots;contribcenter=1.0;doubleweight=0.0;inti=0;for(i=1;i=0;i-)contribi=contribcenter*2-i;weight=weight*2+1.0;for(i=0;i=center;i+)normContribi=contribi/weight;for(i=center+1;inDots;i+)normContribi=normContribcenter*2-i;/endofCalContrib()/处理边缘privatevoidCalTempContrib(intstart,intstop)doubleweight=0;inti=0;for(i=start;i=stop;i+)weight+=contribi;for(i=start;i16;privateintGetGreenValue(intrgbValue)inttemp=rgbValue&0x0000ff00;returntemp8;privateintGetBlueValue(intrgbValue)returnrgbValue&0x000000ff;privateintComRGB(intredValue,intgreenValue,intblueValue)return(redValue16)+(greenValue8)+blueValue;/行水平滤波privateintHorizontalFilter(BufferedImagebufImg,intstartX,intstopX,intstart,intstop,inty,doublepContrib)doublevalueRed=0.0;doublevalueGreen=0.0;doublevalueBlue=0.0;intvalueRGB=0;inti,j;for(i=startX,j=start;i=stopX;i+,j+)valueRGB=bufImg.getRGB(i,y);valueRed+=GetRedValue(valueRGB)*pContribj;valueGreen+=GetGreenValue(valueRGB)*pContribj;valueBlue+=GetBlueValue(valueRGB)*pContribj;valueRGB=ComRGB(Clip(int)valueRed),Clip(int)valueGreen),Clip(int)valueBlue);returnvalueRGB;/endofHorizontalFilter()/图片水平滤波privateBufferedImageHorizontalFiltering(BufferedImagebufImage,intiOutW)intdwInW=bufImage.getWidth();intdwInH=bufImage.getHeight();intvalue=0;BufferedImagepbOut=newBufferedImage(iOutW,dwInH,BufferedImage.TYPE_INT_RGB);for(intx=0;xiOutW;x+)intstartX;intstart;intX=(int)(double)x)*(double)dwInW)/(double)iOutW)+0.5);inty=0;startX=X-nHalfDots;if(startX(dwInW-1)stopX=dwInW-1;stop=nHalfDots+(dwInW-1-X);elsestop=nHalfDots*2;if(start0|stopnDots-1)CalTempContrib(start,stop);for(y=0;ydwInH;y+)value=HorizontalFilter(bufImage,startX,stopX,start,stop,y,tmpContrib);pbOut.setRGB(x,y,value);elsefor(y=0;ydwInH;y+)value=HorizontalFilter(bufImage,startX,stopX,start,stop,y,normContrib);pbOut.setRGB(x,y,value);returnpbOut;/endofHorizontalFiltering()privateintVerticalFilter(BufferedImagepbInImage,intstartY,intstopY,intstart,intstop,intx,doublepContrib)doublevalueRed=0.0;doublevalueGreen=0.0;doublevalueBlue=0.0;intvalueRGB=0;inti,j;for(i=startY,j=start;i=stopY;i+,j+)valueRGB=pbInImage.getRGB(x,i);valueRed+=GetRedValue(valueRGB)*pContribj;valueGreen+=GetGreenValue(valueRGB)*pContribj;valueBlue+=GetBlueValue(valueRGB)*pContribj;valueRGB=ComRGB(Clip(int)valueRed),Clip(int)valueGreen),Clip(int)valueBlue);/System.out.println(valueRGB);returnvalueRGB;/endofVerticalFilter()privateBufferedImageVerticalFiltering(BufferedImagepbImage,intiOutH)intiW=pbImage.getWidth();intiH=pbImage.getHeight();intvalue=0;BufferedImagepbOut=newBufferedImage(iW,iOutH,BufferedImage.TYPE_INT_RGB);for(inty=0;yiOutH;y+)intstartY;intstart;intY=(int)(double)y)*(double)iH)/(double)iOutH)+0.5);startY=Y-nHalfDots;if(startY(int)(iH-1)stopY=iH-1;stop=nHalfDots+(iH-1-Y);elsestop=nHalfDots*2;if(start0|stopnDots-1)CalTempContrib(start,stop);for(intx=0;xiW;x+)value=VerticalFilter(pbImage,startY,stopY,start,stop,x,tmpContrib);pbOut.setRGB(x,y,value);elsefor(intx=0;xiW;x+)value=VerticalFilter(pbImage,startY,stopY,start,stop,x,normContrib);pbOut.setRGB(x,y,value);returnpbOut;/endofVerticalFiltering()intClip(intx)if(x255)return255;returnx;publicstaticvoidmain(Stringargs)throwsIOExceptionImageScaleis=newImageScale();Stringpath=D:MyDocumentsMyPicturespictrue;BufferedImageimage1=ImageIO.read(newFile(path+test.jpg);intw=200,h=400;BufferedImageimage2=is.imageZoomOut(image1,w
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 粮库仓储面试题库及答案
- 乐清电厂面试题库及答案
- 科技教育面试题库及答案
- 康缘药业面试题库及答案
- 农业产业园项目2025年农业资源循环利用效益研究报告
- 2025年智能垃圾分类处理系统项目在商业区的可行性及运营模式研究报告
- 垃圾填埋气发电技术2025年展望:技术创新与碳减排效应评估
- 2025年金融行业数据治理与隐私保护技术合作与交流现状与展望研究报告
- 安全教育培训记录
- 安全教育培训计划小班课件
- 船舶概论课件
- 篮球训练营规章制度范本
- 园林给排水工程
- Rexroth (博世力士乐)VFC 3610系列变频器使用说明书
- ×××学校“学校学生资助管理机构成立文件”
- 动词过去式和过去分词的变化规则练习及答案
- 第四章 土壤污染调查与风险评价
- GB/T 9877-2008液压传动旋转轴唇形密封圈设计规范
- 共享服务中心(HRSSC)课件
- 工程结构检测鉴定与加固第1章工程结构检测鉴定与加固概论课件
- 数字色彩课件
评论
0/150
提交评论