您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > Java实训_图片处理_PS破解之旅
Java实训图片处理_PS破解之旅JavaProgramming2011,Autumn计算机多媒体2Java实训_图片处理实训目的学习并理解常见图片处理的方法与原理。综合运用Java基础(变量、选择、循环、数组、方法、类与对象)知识来解决一些复杂的实际问题。巩固已学知识,训练程序编写、分析和调试的能力实训内容掌握加载和使用第三方提供的类与方法。使用第三方的Picture类,来创建并显示图片对象。学习计算机内图片的表示与存储原理、图片颜色的表示原理。掌握获取图片(x,y)坐标处像素的方法、获取图片所有像素的方法。掌握使用循环通过图片像素改变图片颜色的方法。利用嵌套循环遍历像素,从而掌握复制、改造、旋转和缩放图片的方法。掌握有选择、有条件的修改图片像素的方法,从而实现去除红眼、边缘检测、棕色特效、去除锯齿、更换背景、色度键等图片处理方法。实训要求在听老师讲解、自己查资料与同学讨论的基础上独立完成代码的编写与调试。一周内完成,最后一天答辩,答辩时提交源程序、实训报告。在机房内完成所有实训工作。3图片的计算机表示与存储图片是按照一定格式保存在计算机中的图像常见的图片格式有JPEG、bmp、png等。JPEG(有损压缩格式)是最常见的图片格式,数码相机中的照片文件的扩展名是*.jpg,它们都是JPEG格式。图片是两维数组的像素的集合一个两维数组是一个矩阵,矩阵是元素按水平和垂直两方向顺序排列的集合。图片中的每个元素就是像素(pixel)一个像素就是一个点,整个图片就是由许多个像素点组成的。像素点的多少决定了图片的分辨率。640×480、1024×768、1280×720(720P)、1920×1080(1080P)图片的每个像素点包含此点处图像的坐标、颜色等信息。处理图片其实就是处理图片上的像素点。4用图片浏览器显示图像本实训使用的第三方的类Picture中的show()方法和exploer()方法可用来显示图像。使用show()和expoler()之前需要指定将要被显示的图片对象。参考代码:也可用打开文件对话框来选择要显示的图片文件也可将图片导入Java集成开发环境,然后生成图片对象publicstaticvoidmain(String[]args){StringfileName=“d:/katieFancy.jpg”;//图片文件的绝对路径Picturep1=newPicture(fileName);p1.explore();//用图片浏览器显示图片对象}publicstaticvoidmain(String[]args){Picturep1=newPicture(FileChooser.pickAFile());//使用打开文件对话框p1.show();//用图片框显示图片}publicstaticvoidmain(String[]args){StringfileName=“katieFancy.jpg”;//之前已经将这张图片导入IDE中,所以不用写文件路径Picturep1=newPicture(fileName);p1.explore();}5颜色的表示法人可见光波长在370~730纳米之间的连续光波是可见光人眼对红、绿、蓝三种颜色比较敏感。有一些动物只有两种颜色传感器,如狗。人眼感知颜色人的大脑基于红绿蓝三色传感器的反馈来判断“看到”的颜色。只要把刺激红绿蓝三种颜色感官的东西编码,就记录了人类对颜色的感知。人眼感知的颜色就是红绿蓝三种颜色不同比例的混合用三个数字对像素编码——RGB颜色模式第一个数字表示像素中红色的总量0~255第二个数字是绿色的总量0~255第三个数字是蓝色的总量0~255三个数字不同比例的混合红绿蓝,可以得到任何人眼可看到的颜色,——RGB(red,green,blue)颜色模式。如:RGB(255,255,255)白色、RGB(150,150,150)亮灰色其它编码颜色模式HSB(色彩,饱和度,亮度)CMYK(青色,洋红,黄色,黑色)打印机使用的编码颜色模式67图片处理的基础计算机中处理图片的技术路线首先需要通过JPEG文件得到一个图片对象然后改变图片中的像素最后调用图片对象的方法来显示处理后的图片Picture类——本实训主要利用的类Picture类提供了获取图片对象、处理像素的方法、显示图片等方法。代码示例:Picturep1=newPicture();//生成一个不指向任何图片的对象P1Picturep1=newPicture(“c:\beach.jpg”);//生成一个指向c:\beach.jpg的图片对象P1Picturep1=newPicture(FileChooser.pickAFile());//打开一个文件选择对话框,然后让用户选择指定一个图片文件p1.show()//显示图片p1.explore()//显示图片以及鼠标捕捉像素点的坐标与颜色值p1.getPixel(x,y)//获得图片中(x,y)坐标处的像素p1.getPixels()//获得图片中的所有像素,它从左到右获取第一行像素,然后第二行…Pixelpixel//声明一个名为pixel的像素pixel.getX()//获取像素pixel的X坐标pixel.getY()//获取像素pixel的Y坐标pixel.getRed()//获取像素pixel的红色值pixel.setRed()//设置像素pixel的红色值,即重新设定像素的红色值pixel.getColor()//获取像素pixel的颜色pixel.setColor(Colorcolor)//设置像素pixel的颜色,其参数为一个颜色对象pixelsetColor(red,green,blue)//用三个0~255之间的数以RGB颜色模式设置像素pixel的颜色8计算机图像坐标系原点(0,0)x轴正方向y轴正方向计算机图像坐标系9调用第三方的类本实训完全在别人编的Picture类基础上进行的图片处理开发,因此需要调用第三方的类。本实训选用的JavaIDE本次实训选用eclipse作为Java的集成开发环境eclipse方便、易用、扩展性好,使用的人多。eclipse的使用与NetBeans类似,只有一点小区别,原理一样以后的Java教学将使用eclipse调用第三方类的方法eclipse集成开发环境鼠标在Java项目名上点右键-属性-Java构建路径-库-添加变量-配置变量-新建-填写名称和第三方类所在的路径-依次”确定”检查项目名节点下的“引用的库”子节点下能看到刚才选中的文件夹10实训1——减少图片中红色总量的50%应用:将图片的红色值上调使图片“暖”些,或者减少它,使图片“冷”些,或者调整偏红的数码照片。思路:声明一个数组储存图片的所有像素,然后用while循环遍历所有像素,在遍历过程中将每个像素的红色值减少50%,最后将改变的值写回到像素中。步骤:在Picture类中添加decreaseRed()方法。打开Picture类的代码,在最后一个”}”前添加如下代码:接着新建一个类(如:Test)为主类,在其中的main()方法中添加如下代码:publicvoiddecreaseRed(){//减少红色50%Pixel[]pixelArray=this.getPixels();//获得当前对象的图片像素数组Pixelpixel=null;//声明像素变量pixel用来保存获取的像素对象intvalue=0;//value用来保存每个像素中的红色值intindex=0;//index表示像素数组的下标while(indexpixelArray.length){//while循环遍历整个图片像素数组pixel=pixelArray[index];value=pixel.getRed();//获得一个像素的红色值value=(int)(value*0.5);//将红色值减少为原来的50%,然后取整pixel.setRed(value);//将减少后的红色值写回像素中index=index+1;//index加1后指向下一个像素}}Picturep1=newPicture(FileChooser.pickAFile());p1.show();//显示原图p1.decreaseRed();//减少红色50%p1.explore();//显示红色改变后的效果11实训2——生成日落应用:可以修改多种颜色的值,将一副海滩景色生成夕阳西下的效果。思路:尝试增加红色以增加夕阳的效果,但每种颜色的值不能超过255。第二种方法,也可不改变红色值,减少绿色和蓝色来突出红色,分别减少30%。同样可用while循环来实现。步骤:在Picture类中添加makeSunset()方法。打开Picture类的代码,在最后一个”}”前添加makeSunset()方法代码。接着新建一个类(如:Test)为主类,在其中的main()方法中添加如下代码:StringsourceFile=“beach-smaller.jpg;Picturep1=newPicture(sourceFile);p1.explore();p1.makeSunset();p1.explore();12生成日落的效果13实训3——图片变亮和变暗应用:图片变亮和变暗不是改变一种颜色,而是改变整个颜色.思路:通过getColor()方法获得像素的颜色,然后利用颜色color的brighter()和darker()方法使整个颜色变亮和变暗.这次要求用for循环来遍历所有像素.步骤:在Picture类中添加lighten()方法。(darker()方法与此类同)打开Picture类的代码,在最后一个”}”前添加如下代码:接着新建一个类(如:Test)为主类,在其中的main()方法中添加如下代码:publicvoidlighten(){//图片变亮Pixel[]pixelArray=this.getPixels();Pixelpixel=null;Colorcolor=null;//声明一个颜色对象colorfor(inti=0;ipixelArray.length;i++){pixel=pixelArray[i];color=pixel.getColor();//获得像素pixel的全部颜色color=color.brighter();//调用color对象的brighter()方法pixel.setColor(color);//将调亮后的color来设置pixel的颜色,从而达到整个图片变亮的效果}}Picturep1=newPicture(FileChooser.pickAFile());p1.explore();p1.lighten();//图片变亮p1.explore();14实训4——创建底片应用:所谓底片就是底片上的颜色与实际图片的颜色刚好相反.思路:创建底片很简单,就是分别取红绿蓝三种颜色与255的补数(当前红绿蓝颜色值的相反数),即red=255-red,green=255-green,blue=255-blue,然后用新的红绿蓝得到一个新的颜色,再把新的颜色写回给像素,就可实现底片效果。要求用for循环完成图片像素的遍历.步骤:在Picture类中添加negate()方法。在negate()方法中创建新的底片颜色,然后把底片颜色赋给像素:Colorcolor2=newColor(255-redValue,255-greenValue,255-blueValue);pixel.setColor(color2);接着新建一个类(如:Test)为主类,在其中的main()方法中添加如下代码:Picturep1=newPicture(FileChooser.pickA
本文标题:Java实训_图片处理_PS破解之旅
链接地址:https://www.777doc.com/doc-4239446 .html