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();//生成一个不指向任何图片的对象P1Picturep1=newPicture(“c:\beach.jpg”);//生成一个指向c:\beach.jpg的图片对象P1Picturep1=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

1 / 42
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功