




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
java图形处理,1java图形2paint方法、update方法和repaint方法3graphics类4color类5graphics2d类,1java图形,抽象窗口化工具集(awt)为图形用户界面编程提供接口,使得java可以提供较好的图形用户界面awt把图形处理分为两个层次:1.原始图形处理,这一层较原始,图形直接以点、线和面的形式画到界面上2.提供大量组件,实现可定制的图形用户界面java编程语言中的图形坐标系统不同于数学中的坐标系,屏幕左上角为(0,0),右下角为屏幕水平向右和垂直向下增长的像素数,2paint、repaint和update方法,1.paint方法publicvoidpaint(graphicsg)以画布为参数,在画布上执行画图方法2.repaint方法applet重画时系统自动调用paint方法3.update方法publicvoidupdate(graphicsg)更新容器,向repaint发出刷新小应用程序的信号,缺省的update方法清除applet画图区并调用paint方法,3graphics类,graphics类是所有图形的抽象基类,允许应用程序在各种设备上实现组件的画图。graphics类提供画各种图形的方法,其中包括线、圆和椭圆、矩形和多边形、图像以及各种字体的文本等。这些方法具体如下:publicabstractvoidcliprect(intx,inty,intwidth,intheight)指定的区域切分,publicabstractvoiddrawline(intx1,inty1,intx2,inty2)使用当前颜色,在点(x1,y1)和(x2,y2)之间画线publicabstractvoiddrawoval(intx,inty,intwidth,intheight)画椭圆publicabstractvoidfilloval(intx,inty,intwidth,intheight)画实心椭圆publicabstractvoiddrawpolygon(intxpoints,intypoints,intnpoints)画x和y坐标定义的多边形,publicvoiddrawrect(intx,inty,intwidth,intheight)画矩形publicvoidfillrect(intx,inty,intwidth,intheight)画实心矩形publicabstractvoiddrawroundrect(intx,inty,intwidth,intheight,intarcwidth,intarcheight)画圆角矩形publicabstractvoiddrawstring(stringstr,intx,inty)使用当前字体和颜色画字符串str,publicabstractvoidsetcolor(colorc)设置图形上下文的当前颜色publicabstractvoidsetpaintmode()设置画模式publicabstractbooleandrawimage(imageimg,intx,inty,imageobserverobserver)画特定图publicabstractvoidsetfont(fontfont)设置特定的font字体。使用时首先得到font对象的一个实例,font类常用构造函数为:publicfont(stringname,intstyle,intsize),通过指定的name、style和size创建字体实例。name指字体名,像“隶书”、“timesroman”等,字体风格为粗体、斜体,size指字号大小。例如:fontf=newfont(timesroman,font.bold+font.italic,12);创建了具有粗斜体风格的12磅的timesroman字体。,【例1】设置graphics对象画图,显示结果如图1所示。源程序代码如下:/程序文件名simplegui.javaimportjava.awt.*;importjava.applet.*;publicclasssimpleguiextendsappletimagesamimage;publicvoidinit()samimage=getimage(getdocumentbase(),sample.gif);,publicvoidpaint(graphicsg)/g.cliprect(50,50,180,180);/画线g.drawline(0,0,20,30);/输出字符串g.drawstring(图形显示,100,30);/设置颜色colorc=newcolor(255,200,0);g.setcolor(c);,/设置字体fontf=newfont(timesroman,font.bold+font.italic,24);g.setfont(f);g.drawstring(图形显示,180,30);g.drawline(20,20,100,50);g.drawline(20,20,50,100);g.drawrect(40,40,40,40);g.fillrect(60,60,40,40);g.setcolor(color.red);/3d矩形g.draw3drect(80,80,40,40,true);,g.draw3drect(100,100,40,40,false);g.fill3drect(120,120,40,40,true);/椭圆g.drawoval(150,150,30,40);g.filloval(170,170,20,20);g.setcolor(color.blue);/圆角矩形g.drawroundrect(180,180,40,40,20,20);g.fillroundrect(200,200,40,40,20,20);,/多边形intxc=242,260,254,297,242;intyc=240,243,290,300,270;g.drawpolygon(xc,yc,5);/图片g.drawimage(samimage,250,50,this);,图1简单的图形界面,将例1注释的程序语句/g.cliprect(50,50,180,180);的注释符号去掉,重新编译执行,可以看见如图2所示的结果。,图2裁剪后的图形界面,4color类,color类是用来封装颜色的使用color对象较为简单的方法是直接使用color类提供的预定义的颜色,像红色color.red、橙色color.orange等;也可以使用rgb颜色模式进行定义。所谓rgb颜色模式是指使用三种基色:红、绿、蓝,通过三种颜色的调整得出其它各种颜色,这三种基色的值范围为0255。例如colorc=newcolor(255,200,0);定义橙色。表1给出常用颜色的rgb值以及对应的类预定义参数。,表1常用颜色的rgb值以及对应的类预定义参数,color还有一个构造函数,它构造的color对象用于是否透明显示颜色。publiccolor(intred,intgreen,intblue,intalpha)其中:前三个分量即rgb颜色模式中的参数,第四个alpha分量指透明的程度。当alpha分量为255时,表示完全不透明,正常显示;当alpha分量为0时,表示完全透明,前三个分量不起作用,而介于0255之间的值可以制造出颜色不同的层次效果。,【例2】测试color对象,界面如图3所示。源程序代码如下:/程序文件名usecolor.javaimportjava.awt.*;importjava.applet.*;importjava.awt.geom.*;publicclassusecolorextendsappletpublicvoidpaint(graphicsoldg)graphics2dg=(graphics2d)oldg;,g.setcolor(color.blue);g.fill(newellipse2d.float(50,50,150,150);g.setcolor(newcolor(255,0,0,0);g.fill(newellipse2d.float(50,50,140,140);g.setcolor(newcolor(255,0,0,64);g.fill(newellipse2d.float(50,50,130,130);g.setcolor(newcolor(255,0,0,128);g.fill(newellipse2d.float(50,50,110,110);g.setcolor(newcolor(255,0,0,255);g.fill(newellipse2d.float(50,50,90,90);g.setcolor(newcolor(255,200,0);g.fill(newellipse2d.float(50,50,70,70);,图3颜色测试界面,5graphics2d类,graphics2d类继承于graphics类,提供几何学、坐标变换、颜色管理以及文本排列等的更高级控制。graphics2d类是java平台上渲染二维图形、文字、以及图片的基础类,提供较好的对绘制形状、填充形状、旋转形状、绘制文本、绘制图像以及定义颜色的支持。在awt编程接口中,用户通过paint方法接收graphics对象作为参数,若是使用graphics2d类,就需要在paint方法中进行强制转换。publicvoidpaint(graphicsold)graphics2dnew=(graphics2d)old;,5.1绘制形状graphics2d提供以下两个方法进行形状的绘制:publicabstractvoiddraw(shapes)根据graphics2d的环境设置画出形状s,其中shape接口包含的类如表2所示。publicabstractvoidfill(shapes)画实心形状s。,表2graphics2d绘制的图形类,其中generalpath是一般的几何路径,它的构造函数为:publicgeneralpath()构造一个空的对象。常用的方法有四个,分别如下:publicvoidlineto(floatx,floaty)从当前坐标点到(x,y)坐标点画一条直线,将此点添加到路径上。publicvoidmoveto(floatx,floaty)移动到坐标点(x,y),在路径上添加此点。,publicvoidquadto(floatx1,floaty1,floatx2,floaty2)以坐标点(x1,y1)为控制点,在当前坐标点和坐标点(x2,y2)之间插入二次曲线片断。publicvoidcurveto(floatx1,floaty1,floatx2,floaty2,floatx3,floaty3)以(x1,y1)和(x2,y2)为控制点,在当前坐标点和(x3,y3)之间插入曲线片断。,在draw方法中提到graphics2d的环境设置。所谓的环境设置是指设置画图的笔画和填充属性等,设置方法分别如下:publicabstractvoidsetstroke(strokes)设置笔画的粗细。其中stroke接口中常用basicstroke类来实现,一个较简单的构造函数为publicbasicstroke(floatwidth)创建实线笔画宽度为width。publicabstractvoidsetpaint(paintpaint),设置graphics2d环境的填充属性。其中,paint的值可以为渐变填充类java.awt.gradientpaint,也可以为图形填充类java.awt.texturepaint,后者将在5.3节绘制图像中讲到。渐变填充类常用构造函数为publicgradientpaint(floatx1,floaty1,colorcolor1,floatx2,floaty2,colorcolor2,booleancyclic)构建一个渐变gradientpaint对象,在起始坐标点到目标坐标点之间从颜色color1到color2渐变,cyclic为真,循环渐变。,【例3】演示了几何形状、笔画变换以及颜色渐变显示。其中直线的笔画宽度为10,其它笔画宽度为5,中间三个图形实现绿色到蓝色的循环渐变,后三个图形实现红色到黄色的循环渐变,如图4所示。/程序文件名gui2d.javaimportjava.awt.*;importjava.applet.*;importjava.awt.geom.*;publicclassgui2dextendsapplet,publicvoidpaint(graphicsoldg)graphics2dg=(graphics2d)oldg;/设置笔画宽度basicstrokestroke=newbasicstroke(10);g.setstroke(stroke);/画线line2dline=newline2d.float(0,0,20,30);g.draw(line);line=newline2d.float(50,50,100,50);g.draw(line);,line=newline2d.float(50,50,50,100);g.draw(line);stroke=newbasicstroke(5);g.setstroke(stroke);/设置渐变填充gradientpaintgt=newgradientpaint(0,0,color.green,50,30,color.blue,true);g.setpaint(paint)gt);/画矩形rectangle2drect=newrectangle2d.float(80,80,40,40);,g.draw(rect);rect=newrectangle2d.float(100,100,40,40);g.fill(rect);/画椭圆ellipse2dellipse=newellipse2d.float(120,120,30,40);g.draw(ellipse);gt=newgradientpaint(0,0,color.red,30,30,color.yellow,true);g.setpaint(paint)gt);ellipse=newellipse2d.float(140,140,20,20);g.fill(ellipse);,/画圆角矩形roundrectangle2droundrect=newroundrectangle2d.float(160,160,40,40,20,20);g.draw(roundrect);roundrect=newroundrectangle2d.float(180,180,40,40,20,20);g.fill(roundrect);/画几何图形generalpathpath=newgeneralpath();path.moveto(150,0);path.lineto(160,50);path.curveto(190,200,240,140,200,100);g.fill(path);,图4通过graphics2d对象绘制形状,5.2绘制文本graphics2d类提供一个文本布局(textlayout)对象,用于实现各种字体或段落文本的绘制。其构造函数为:publictextlayout(stringstring,fontfont,fontrendercontextfrc)通过字符串string和字体font构造布局。publicvoiddraw(graphics2dg2,floatx,floaty)将这个textlayout对象画到graphics2d对象g2上的x,y坐标处。publicrectangle2dgetbounds()返回textlayout对象的区域。,【例4】测试绘制文本功能,如图5所示。源程序代码如下:/程序文件guitext.javaimportjava.awt.*;importjava.applet.*;importjava.awt.geom.*;importjava.awt.font.*;publicclassguitextextendsappletpublicvoidpaint(graphicsoldg),graphics2dg=(graphics2d)oldg;/设置字体fontf1=newfont(courier,font.plain,24);fontf2=newfont(helvetica,font.bold,24);fontrendercontextfrc=g.getfontrendercontext();stringstr=newstring(这是一个文本布局类的实现);stringstr2=newstring(扩充绘制文本的功能);/构造文本布局对象textlayoutlayout=newtextlayout(str,f1,frc);point2dloc=newpoint2d.float(20,50);,/绘制文本layout.draw(g,(float)loc.getx(),(float)loc.gety();/设置边框rectangle2dbounds=layout.getbounds();bounds.setrect(bounds.getx()+loc.getx(),bounds.gety()+loc.gety(),bounds.getwidth(),bounds.getheight();g.draw(bounds);layout=newtextlayout(str2,f2,frc);g.setcolor(color.red);layout.draw(g,20,80);,图5graphics2d对象绘制文本,5.3绘制图像绘制图像用到bufferedimage类,bufferedimage类是指存放图像数据的可访问的缓冲。其构造函数为:publicbufferedimage(intwidth,intheight,intimagetype)使用宽度(width)、高度(height)和imagetype类型构造bufferedimage对象。,用图片填充椭圆的具体过程如下:(1)创建一个graphics2d,可以画到bufferedimage中。例如构建一个bufferedimage对象buf。bufferedimagebuf=newbufferedimage(img.getwidth(this),img.getheight(this),bufferedimage.type_int_argb);创建一个临时graphics2d对象:graphicstmpg=buf.creategraphics();将图像画入临时缓冲:tmpg.drawimage(img,10,10,this);,(2)用texturepaint类进行填充:publictexturepaint(bufferedimagetxtr,rectangle2danchor)构造texturepaint对象,需要一个rectangle2d对象来存放该对象:rectangle2drect=newrectangle2d.float(0,0,h,w);texturepaintt=newtexturepaint(buf,rect);(3)然后设置填充模式,并进行填充:g.setpaint(t);g.fill(newellipse2d.float(100,50,60,60);,【例5】完成图像显示,并将区域蓝色透明显示,然后进行图片填充,如图6所示。源程序代码如下:/程序文件名guiimage.javaimportjava.awt.*;importjava.applet.*;importjava.awt.geom.*;importjava.awt.font.*;importjava.awt.image.*;.*;,publicclassguiimageextendsappletpublicvoidpaint(graphicsoldg)graphics2dg=(graphics2d)oldg;tryurlimgurl=newurl(getdocumentbase(),sample.g
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025贵州省自然资源厅直属事业单位第十三届贵州人才博览会引才8人考前自测高频考点模拟试题(含答案详解)
- 2025广东南粤银行佛山分行招聘模拟试卷及一套参考答案详解
- 2025广东佛山市南海区桂城街道招聘辅警体能测评、笔试考前自测高频考点模拟试题及答案详解(夺冠)
- 2025内蒙古通辽市科左中旗教体系统招聘(教师岗位)30人模拟试卷附答案详解(模拟题)
- 2025年温州永嘉县茗岙乡卫生院招聘劳务派遣人员1人模拟试卷及一套完整答案详解
- 2025湖北沙市区面向城市社区党组织书记专项招聘事业岗位人员10人模拟试卷及一套答案详解
- 2025年陕能(庆阳)能源开发有限公司招聘15人模拟试卷带答案详解
- 2025广东广州市增城区人民法院招聘合同制司法警察兼囚车驾驶员拟聘用人员模拟试卷及答案详解(易错题)
- 2025江苏苏州市张家港市人力资源开发有限公司招聘宣传专员1人考前自测高频考点模拟试题及答案详解(易错题)
- 2025南昌市西湖区疾病预防控制中心招聘工作人员1人考前自测高频考点模拟试题及答案详解参考
- 2025年10月“江南十校”2026届新高三第一次综合素质检测 化学试卷(含答案详解)
- 桩基冲击钻机施工方案
- 2025年七年级上学期语文第一个月月考试卷含答案
- 屠宰兽医检验考试题及答案
- 基金考试题库大全及答案
- 航海船舶运输管理总结
- 游戏:看表情符号猜成语PPT
- 影视鉴赏-第一章-影视鉴赏的基本概念
- 电厂安全生产运行管理培训课件
- 输液室运用PDCA降低静脉输液患者外渗的发生率品管圈(QCC)活动成果
- 数星星的孩子习题精选及答案
评论
0/150
提交评论