【转】java中的绘图(二)

五.绘制椭圆

方法:drawOval(int x,int y,int width,int height)

功能:在指定的外接矩形中绘制一个圆形或椭圆。在这里椭圆的中心就是它外接矩形的中心,这个矩形的左上角坐标为(x,y),宽度和高度分别为width和height,即:

    参数x为x轴坐标

    参数y为y轴坐标

    参数width为矩形的宽度

    参数height为矩形的高度

    方法fillOval(int x,int y,int width,int height);作用是在指定的外接矩形中绘制一个圆形或椭圆,并使用当前图形对象的颜色对它进行填充。在这里椭圆的中心就是它外接矩形的中心,这个矩形的左上角坐标为(x,y),宽度和高度分别为width和height,即:

    参数x为x轴坐标

    参数y为y轴坐标

    参数width为矩形的宽度

    参数height为矩形的高度

 

              import java.awt.*;

              import java.applet.*;

              public class mj1 extends Applet{

                  public void init(){

                      resize(280,280);

                     }

                   public void paint(Graphics g){

                        g.fillOval(20,20,90,90);

                        g.drawOval(20,150,90,30);

                        g.fillOval(140,20,70,200);

                      }

                    }      

 

六.绘制弧形             

                      

方法:drawArc(int x,int y,int width,int height,int startAngle,int arcAngle)

功能:在指定的外接矩形中绘制一个圆弧或椭圆弧。在这里圆弧或椭圆弧的中心就是它外接矩形的中心,这个矩形的左上角坐标为(x,y);宽度和高度分别为width和height,即:

    参数x为x轴坐标

    参数y为y轴坐标

    参数width为矩形的宽度

    参数height为矩形的高度

    参数startAngle为圆弧或椭圆弧的起始角度

    参数arcAngle为圆弧或椭圆弧跨越的角度

    参数startAngle和arcAngle的单位为 “度”,起始角的0度位置是3点钟的方位。如果arcAngle的值是正值,则表示从startAngle的角度开始,向逆时针方向画arcAngle度的弧;如果arcAngle的值是负值,则表示从startAngle的角度开始,向顺时针方向画arcAngle度的弧。

    方法fillArc(int x,int y,int width,int height,int startAngle,int arcAngle):其作用是在指定的外接矩形中绘制一个圆弧或椭圆弧,并使用当前图形对象的颜色对它进行填充。在这里圆弧或椭圆弧的中心就是它外接矩形的中心,这个矩形的左上角坐标为(x,y);宽度和高度分别为width和height,即:

    参数x为x轴坐标

    参数y为y轴坐标

    参数width为矩形的宽度

    参数height为矩形的高度

    参数startAngle为圆弧或椭圆弧的起始角度

    参数arcAngle为圆弧或椭圆弧跨越的角度

    参数startAngle和arcAngle的单位为 “度”,起始角的0度位置是3点钟的方位。如果arcAngle的值是正值,则表示从startAngle的角度开始,向逆时针方向画arcAngle度的弧;如果arcAngle的值是负值,则表示从startAngle的角度开始,向顺时针方向画arcAngle度的弧。

           import java.awt.*;

           import java.applet.*;

           public class mj1 extends Applet{

              public void init(){

                  resize(280,280);

                 }

               public void paint(Graphics g){

                   g.setColor(Color.gray);

                   g.fillArc(30,20,90,90,0,180);

                   g.drawArc(30,150,90,90,45,135);

                   g.drawArc(150,20,50,80,225,300);

                   g.fillArc(140,150,70,100,45,90);

                  }

              }

       

. 绘制多边形

方法: drawPolygon(int xPoints[],int yPoints[],int nPoints)

功能: 根据参数数组xPoints[]和yPoints[]提供的各个顶点坐标,绘制一个多边形。这个方法绘制的多边形包括nPoints个顶点,每条线从( xPoints[I-1], yPoints[I-1])到(xPoints[I], yPoints[I]),最后一条线从最后一个顶点开始到第一个顶点结束,其中:

    参数xPoints为多边形所有顶点的x轴坐标数组

    参数yPoints为多边形所有顶点的y轴坐标数组

    参数nPoints为顶点数目

方法fillPolygon(int xPoints[],int yPoints[],int nPoints);

功能: 根据参数数组xPoints[]和yPoints[]提供的各个顶点坐标,绘制一个多边形并使用当前图形对象的颜色对其进行填充。这个方法绘制的多边形包括nPoints个顶点,每条线从( xPoints[I-1], yPoints[I-1])到(xPoints[I], yPoints[I]),最后一条线从最后一个顶点开始到第一个顶点结束,其中:

    参数xPoints为多边形所有顶点的x轴坐标数组

    参数yPoints为多边形所有顶点的y轴坐标数组

    参数nPoints为顶点数目

    例: 我们绘制了一个八边形,第1个八边形我们用了9个顶点,即八边形的最后一条线是从最后一个顶点开始到第一个顶点结束的,所以我们看到的程序执行结果中的八边形是封闭的。在另一个八边形中我们用了8个顶点,即八边形的最后一条线是从倒数第2个顶点开始到最后一个顶点结束的,所以我们看到的程序执行结果中的八边形是不封闭的。

     

 

              import java.awt.*;

             import java.applet.*;

             public class mj1 extends Applet{

                 public void init(){

                     resize(250,200);

                    }

                 public void paint(Graphics g){

                     int Dx1[]={20,40,60,80,80,60,40,20,20};

                     int Dy1[]={30,10,10,30,50,70,70,50,30};

                     int Dd1=9;

                     int Dx2[]={20,40,60,80,80,60,40,20};

                     int Dy2[]={120,100,100,120,140,160,160,140};

                     int Dd2=8;

                     int Dx3[]={100,150,200,100};

                     int Dy3[]={50,10,50,50};

                     int Dd3=4;

                     int Dx4[]={100,150,200};

                     int Dy4[]={140,90,140};

                     int Dd4=3;

                     g.setColor(Color.red);

                     g.fillPolygon(Dx1,Dy1,Dd1);

                     g.drawPolygon(Dx2,Dy2,Dd2);

                     g.fillPolygon(Dx3,Dy3,Dd3);

                     g.drawPolygon(Dx4,Dy4,Dd4);

                   }

                }

          

. 相互重叠的图形来

 

   方法: XORMode(Color c1)

  功能: 绘制出相互重叠的图形,其中:

参数c1表示第2种颜色

 

 :   程序中有4个不同颜色的图形,相互重叠。

       import java.awt.*;

          import java.applet.*;

          public class mj1 extends Applet{

              public void init(){

                  resize(250,150);

                }

              public void paint(Graphics g){

                 int Dx1[]={30,50,70,90,90,70,50,30,30};

                 int Dy1[]={40,20,20,40,60,80,80,60,40};

                 int Dd1=9;

                 int Dx2[]={100,150,200,100};

                 int Dy2[]={50,10,50,50};

                 int Dd2=4;

                 g.setColor(Color.red);

                 g.fillOval(130,40,40,40);

                 g.setXORMode(Color.green);

                 g.drawPolygon(Dx2,Dy2,Dd2);

                 g.setColor(Color.lightGray);

                 g.fillPolygon(Dx1,Dy1,Dd1);

                 g.setXORMode(Color.yellow);

                 g.fillRect(15,10,220,80);

               }

             }

. 拷贝图形

 

方法: copyArea(int x,int y,int width,int height,int dx,int dy)

功能: 拷贝一个图形,这个方法的作用为拷贝一块屏幕上的矩形区域,该矩形区左上顶点坐标为(x,y),宽度为width,高度为height,该矩形区域被拷贝到坐标(x+dx,y+dy)处,

    参数x为源矩形区域的x轴坐标

    参数y为源矩形区域的y轴坐标

    参数width为宽度

    参数height为宽度

    参数dx为水平移动距离

    参数dy为垂直移动距离。

例.  

            import java.awt.*;

            import java.applet.*;

            public class mj1 extends Applet{

                public void init(){

                    resize(300,180);

                   }

                public void paint(Graphics g){

                    int Dx1[]={100,150,200,100};

                    int Dy1[]={50,10,50,50};

                    int Dd1=4;

                    g.setColor(Color.green);

                    g.fillPolygon(Dx1,Dy1,Dd1);

                    g.copyArea(95,5,110,50,-60,70);

                    g.copyArea(95,5,110,50,60,70);

                   }

               } 

          

                     §4. 图像输出

                       

. 加载图片文件

 

    Java API在包java.awt、java.applet和java.image中都有对图形的支持。而目前Java中可以直接载入并输出的图形文件格式有两种。即:GIF和JPEG文件,所以我们只要给定图形文件的位置和文件名,就可以通过getImage这个方法载入所要的图形。getImage方法的格式为:

    ①Image getImage( URL url ); 

    ②Image getImage( URL url, String name );    

    其中第①方式要给出图形文件的绝对URL地址,第②方式是要给出图形文件的基地址和图形文件名。如果图形文件和Applet在同一目录下时,用getCodeBase( )获取基地址,如果图形文件和包含Applet的HTML文件在同一目录下,则用getDocumentBase( ) 获取基地址。

 

. 图片的显示输出

 

    输出图形要用到类Graphics,在Graphics类中用方法drawImage,可以把图形绘制出来,如果我们仅仅是简单地想要将图形显示出来,用g.drawImage(image1,x,y,this),其中:

    参数image1是类Image生成的对象

    参数x和参数y是图形出现的坐标点

    例1.  import java.awt.*;

          import java.applet.*;

          public class xiaotiu extends Applet {

                 Image pic1;

                 public void init(){

                      resize(200,150);                 

                      pic1=getImage(getDocumentBase( ), "hlpglobe1.gif");

                    }

                    public void paint(Graphics g){

                         g.drawImage(pic1,30,25,this);

                       }

                }   

l         如果用绝对位置来表示URL,必须根据文件位置和文件名称创建一个URL对象,再有getImage()方法载入图像文件。而创建URL对象时,URL够造方法可能会产生一个异常,必须对这个异常进行处理。

2。:

import java.awt.*;

import java.applet.*;

import java.net.URL;

import java.net.MalformedURLException;

          public class mj1 extends Applet{

          Image pic1;

                 public void init(){

                                    try{

                                           URL url=new URL("file:///c:/mjj/tt8.gif");

                                     pic1=getImage(url);

                    }

                                    catch(MalformedURLException e){

                                           System.out.println("MalformedURLException:"+e);}

                             }

                    public void paint(Graphics g){

                         g.drawImage(pic1,30,25,this);

                       }

                }

三.图形的缩放

方式: g.drawImage(image1,x,y,width,heigth,this)

功能:以不同的大小显示出图像

其中:width和heigth分别代表图像的宽和高。

 

例 3:    

           import java.awt.*;

         import java.applet.*;

         public class xiaotiu extends Applet {

                 Image pic1;

                 public void init(){

                      pic1=getImage(getCodeBase ( ), "hlpglobe1.gif");

                    }

                    public void paint(Graphics g){  

                                            g.drawImage(pic1,10,0,this);

                         g.drawImage(pic1,10,100,100,100,this);

                         g.drawImage(pic1,10,220,250,150,this);

                       }

              

. 在一个图形中提取指定区域的图形

    CropImageFilter, CropImageFilter是一个图像过滤器,它可以对图像进行修剪,主要用于提取指定矩形区域的图像。我们可以由此创建一个新的图形对象,也就是说通过这个方法,我们可以在一个图像中把我们需要的部分提取出来。方法:  public CropImageFilter(int x,int y,int w,int h),其中:

   参数x表示被选取矩形左上角的x轴坐标

   参数y表示被选取矩形左上角的y轴坐标

   参数w为被选取矩形的宽度

   参数h为被选取矩形的高度

例4.

 

import java.awt.*;

import java.applet.*;

import java.awt.image.*;

import java.awt.event.*;

    public class xiaotiu extends Applet implements MouseListener {

      Image pic1,pic2;

         int x1,y1,w,h,count=1;

            public void init(){

           pic1=getImage(getCodeBase(),"联想标志.jpg");

                 pic2=pic1;

                 addMouseListener(this);

                   }

        public void paint(Graphics g){

       int w=pic2.getWidth(this);

          int h=pic2.getHeight(this);

          Dimension d=getSize();

          if(w>d.width)w=d.width;

          if(h>d.height)h=d.height;

       g.drawImage(pic2,(d.width-w)/2,(d.height-h)/2,this);

              }

              public void mouseClicked(MouseEvent e){}

              public void mouseEntered(MouseEvent e){}

              public void mouseExited(MouseEvent e){}        

              public void mousePressed(MouseEvent e){

                             int x;int y;  

                 Graphics g=getGraphics();

                             x=e.getX();

                             y=e.getY();

                               if(count==1){

                                      x1=x;y1=y;count=2;

                                      g.drawLine(x-5,y,x+5,y);

                                      g.drawLine(x,y-5,x,y+5);

                               }else if(count==2){

                                      count=3;

                                      if(x1>x)w=x1-x;

                                      else w=x-x1;

                                      if(y1>y)h=y1-y;

                                      else h=y-y1;

                                      pic2=crop();

                                      repaint();

                               }else{

                                      count=1;

                                      pic2=pic1;

                                      repaint();

                               }

                        }

              public void mouseReleased(MouseEvent e){

              }

              Image crop(){

              ImageFilter  filter =new CropImageFilter(x1,y1,w,h);

               ImageProducer producer=new FilteredImageSource(pic1.getSource(),filter);

               return createImage(producer);

              }

                }   

 

l         例播放声音:

Java提供两种在applet中播放声音的机制:Applet类的play方法和AudioClip中的play方法。

例1:

import java.awt.*;

import java.applet.*;

public class sheng extends Applet{

 public void paint(Graphics g){

        g.drawString("AudioTest",25,25);

        play(getDocumentBase(),"shengxin.au.au");

}

           }

 

例2:

 import java.awt.*;

 import java.applet.*;

 public class shengxin extends Applet{

    AudioClip sound;

    public void init(){

        sound=getAudioClip(getDocumentBase(),"shengt1.au");}

    public void paint(Graphics g){

           Font ltz =new Font ("TimesRoman",Font.BOLD+Font.ITALIC,80);

           g.setFont(ltz);

           g.setColor(Color.red);

           g.drawString("请听音乐",45,80);

           g.setColor(Color.yellow);

           g.drawString("请听音乐",47,82);

       }

   public void start(){

            sound.loop();

         }

   public  void stop(){

            sound.stop();

   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值