第十四章图形与图像
例子1
importjava.applet.;
importjava.awt.;
publicclassExample14_1extendsApplet
{publicvoidpaint(Graphicsg)
{g.drawOval(0,0,100,100);
g.drawRoundRect(110,10,90,60,50,30);
g.setColor(Color.black);
g.fillArc(0,0,100,100,-90,-180);
g.setColor(Color.white);
g.fillArc(0,0,100,100,-90,180);
g.fillArc(25,0,50,50,-90,-180);
g.setColor(Color.black);
g.fillOval(40,15,20,20);
g.fillArc(25,50,50,50,90,-180);
g.setColor(Color.white);
g.fillOval(40,65,20,20);
g.setColor(Color.black);
intpx[]={50,70,170};
intpy[]={120,150,80};
g.drawPolygon(px,py,3);
}
}
例子2
importjava.applet.;
importjava.awt.;
publicclassExample14_2extendsApplet
{Fontf1=newFont("隶书",Font.BOLD,28);
Fontf2=newFont("TimesRoman",Font.BOLD+Font.ITALIC,16);
publicvoidpaint(Graphicsg)
{g.setFont(f1);
g.drawString("计算机科学技术",10,30);
g.setFont(f2);
chara[]="ILoveYou".toCharArray();
intx=80,y=0;
for(inti=0;i {y=x-15;
g.drawChars(a,i,1,x,y);
x=x+8;
}
}
}
例子3
importjava.applet.;
importjava.awt.;
importjava.awt.event.;
publicclassExample14_3extendsApplet
{inti=0;
publicvoidpaint(Graphicsg)
{i=(i+2)%360;
Colorc=newColor((3i)%255,(7i)%255,(11i)%255);
g.setColor(c);
g.fillArc(30,50,120,100,i,2);
g.fillArc(30,152,120,100,i,2);
try{Thread.sleep(300);
}
catch(InterruptedExceptione){}
repaint();
}
publicvoidupdate(Graphicsg)
{g.clearRect(30,152,120,100);
paint(g);
}
}
例子4
importjava.awt.;
importjava.applet.;
importjava.awt.geom.;
publicclassExample14_4extendsApplet
{publicvoidpaint(Graphicsg)
{g.setColor(Color.blue);
Graphics2Dg_2d=(Graphics2D)g;
Ellipse2Dellipse=
newEllipse2D.Double(20,30,100,50);
Line2Dline=newLine2D.Double(70,30,70,10);
g_2d.setColor(Color.red);
g_2d.draw(line);
for(inti=1,k=0;i<=6;i++)
{ellipse.setFrame(20+k,30,100-2k,50);
if(i<=5)
g_2d.draw(ellipse);
else
g_2d.fill(ellipse);
k=k+5;
}
}
}
例子5
importjava.awt.;
importjava.applet.;
importjava.awt.geom.;
publicclassExample14_4extendsApplet
{publicvoidpaint(Graphicsg)
{g.setColor(Color.red);
Graphics2Dg_2d=(Graphics2D)g;
Arc2Darc=
newArc2D.Double(2,2,80,80,0,270,Arc2D.OPEN);
g_2d.draw(arc);
arc.setArc(2,90,80,80,0,270,Arc2D.CHORD);
g_2d.draw(arc);
arc.setArc(90,2,80,80,0,270,Arc2D.PIE);
g_2d.fill(arc);
}
}
例子6
importjava.awt.;
importjava.applet.;
importjava.awt.geom.;
publicclassExample14_6extendsApplet
{publicvoidpaint(Graphicsg)
{Graphics2Dg_2d=(Graphics2D)g;
QuadCurve2DquadCurve=
newQuadCurve2D.Double(2,10,51,70,100,10);
g_2d.drawString("控制点",51,70);
Line2Dline=newLine2D.Double(2,10,51,70);
g_2d.draw(quadCurve);
g_2d.draw(line);
line.setLine(100,10,51,70);
g_2d.draw(line);
CubicCurve2DcubicCurve=
newCubicCurve2D.Double(2,96,40,180,70,50,136,96);
g_2d.draw(cubicCurve);
}
}
例子7
importjava.awt.;
importjava.applet.;
importjava.awt.geom.;
publicclassExample14_7extendsApplet
{
publicvoidpaint(Graphicsg)
{
Graphics2Dg_2d=(Graphics2D)g;
BasicStrokebs_1
=newBasicStroke(16,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
BasicStrokebs_2
=newBasicStroke(16f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER);
BasicStrokebs_3
=newBasicStroke(16f,BasicStroke.CAP_SQUARE,BasicStroke.JOIN_ROUND);
Line2DredLineOne=newLine2D.Double(0,16,120,16);
Line2DredLineTwo=newLine2D.Double(120,16,120,70);
g_2d.setStroke(bs_1);
g_2d.setColor(Color.red);
g_2d.draw(redLineOne);
g_2d.draw(redLineTwo);
g_2d.setColor(Color.blue);
Line2DblueLineOne=newLine2D.Double(0,40,85,40);
Line2DblueLineTwo=newLine2D.Double(85,40,85,80);
g_2d.setStroke(bs_2);
g_2d.draw(blueLineOne);
g_2d.draw(blueLineTwo);
g_2d.setColor(Color.green);
Line2DgreanLineOne=newLine2D.Double(0,80,65,80);
Line2DgreanLineTwo=newLine2D.Double(65,80,65,120);
g_2d.setStroke(bs_3);
g_2d.draw(greanLineOne);
g_2d.draw(greanLineTwo);
}
}
例子8
importjava.awt.;
importjava.applet.;
importjava.awt.geom.;
publicclassExampleextendsApplet
{publicvoidpaint(Graphicsg)
{Graphics2Dg_2d=(Graphics2D)g;
GradientPaintgradient_1
=newGradientPaint(0,0,Color.red,50,50,Color.green,false);
g_2d.setPaint(gradient_1);
Rectangle2Drect_1=newRectangle2D.Double(0,0,50,50);
g_2d.fill(rect_1);
GradientPaintgradient_2
=newGradientPaint(60,50,Color.white,150,50,Color.red,false);
g_2d.setPaint(gradient_2);
Rectangle2Drect_2=newRectangle2D.Double(60,50,90,50);
g_2d.fill(rect_2);
}
}
例子9
importjava.awt.;
importjava.applet.;
importjava.awt.geom.;
publicclassExample14_9extendsApplet
{publicvoidpaint(Graphicsg)
{Graphics2Dg_2d=(Graphics2D)g;
Strings="旋转起来";
Ellipse2Dellipse=
newEllipse2D.Double(30,30,80,30);
AffineTransformtrans=newAffineTransform();
for(inti=1;i<=24;i++)
{trans.rotate(15.0Math.PI/180,70,45);
g_2d.setTransform(trans);
//现在画的就是旋转后的椭圆样子
g_2d.draw(ellipse);
}
for(inti=1;i<=12;i++)
{trans.rotate(30.0Math.PI/180,60,160);
g_2d.setTransform(trans);
//现在画的就是旋转后的字符串
g_2d.drawString(s,60,160);
}
}
}
例子10
importjava.awt.geom.;
importjava.awt.;
importjava.applet.;
publicclassExample14_8extendsApplet
{publicvoidpaint(Graphicsg)
{Graphics2Dg_2d=(Graphics2D)g;
Ellipse2Dellipse=
newEllipse2D.Double(0,2,80,80);
Rectangle2Drect=
newRectangle2D.Double(40,2,80,80);
Areaa1=newArea(ellipse);
Areaa2=newArea(rect);
a1.intersect(a2);//"与"
g_2d.fill(a1);
ellipse.setFrame(130,2,80,80);
rect.setFrame(170,2,80,80);
a1=newArea(ellipse);
a2=newArea(rect);
a1.add(a2);//"或"
g_2d.draw(a1);
ellipse.setFrame(0,90,80,80);
rect.setFrame(40,90,80,80);
a1=newArea(ellipse);
a2=newArea(rect);
a1.subtract(a2);//"差"
g_2d.draw(a1);
ellipse.setFrame(130,90,80,80);
rect.setFrame(170,90,80,80);
a1=newArea(ellipse);
a2=newArea(rect);
a1.exclusiveOr(a2);//"异或"
g_2d.fill(a1);
}
}
例子11
importjava.awt.;
importjava.applet.;
importjava.awt.geom.;
publicclassExample14_11extendsApplet
{
publicvoidpaint(Graphicsg)
{
Graphics2Dg_2d=(Graphics2D)g;
Ellipse2Dellipse1=
newEllipse2D.Double(20,80,60,60),
ellipse2=
newEllipse2D.Double(40,80,80,80);
g_2d.setColor(Color.blue);
Areaa1=newArea(ellipse1),
a2=newArea(ellipse2);
a1.subtract(a2);//"差"
AffineTransformtrans=newAffineTransform();
for(inti=1;i<=10;i++)
{
trans.rotate(36.0Math.PI/180,95,105);
g_2d.setTransform(trans);
g_2d.fill(a1);
}
}
}
例子12
importjava.awt.;
importjava.awt.event.;
importjavax.swing.Timer;
importjava.awt.geom.;
importjava.util.;
classClockextendsCanvas
implementsActionListener
{Datedate;
TimersecondTime;
inthour,munite,second;
Line2DsecondLine,muniteLine,hourLine;
inta,b,c;
doublepointSX[]=newdouble[60],//用来表示秒针端点坐标的数组
pointSY[]=newdouble[60],
pointMX[]=newdouble[60],//用来表示分针端点坐标的数组
pointMY[]=newdouble[60],
pointHX[]=newdouble[60],//用来表示时针端点坐标的数组
pointHY[]=newdouble[60];
Clock()
{secondTime=newTimer(1000,this);
pointSX[0]=0;//12点秒针位置
pointSY[0]=-100;
pointMX[0]=0;//12点分针位置
pointMY[0]=-90;
pointHX[0]=0;//12点时针位置
pointHY[0]=-70;
doubleangle=6Math.PI/180;//刻度为6度
for(inti=0;i<59;i++)//计算出各个数组中的坐标
{pointSX[i+1]=pointSX[i]Math.cos(angle)-Math.sin(angle)pointSY[i];
pointSY[i+1]=pointSY[i]Math.cos(angle)+pointSX[i]Math.sin(angle);
pointMX[i+1]=pointMX[i]Math.cos(angle)-Math.sin(angle)pointMY[i];
pointMY[i+1]=pointMY[i]Math.cos(angle)+pointMX[i]Math.sin(angle);
pointHX[i+1]=pointHX[i]Math.cos(angle)-Math.sin(angle)pointHY[i];
pointHY[i+1]=pointHY[i]Math.cos(angle)+pointHX[i]Math.sin(angle);
}
for(inti=0;i<60;i++)
{pointSX[i]=pointSX[i]+120;//坐标平移
pointSY[i]=pointSY[i]+120;
pointMX[i]=pointMX[i]+120;//坐标平移
pointMY[i]=pointMY[i]+120;
pointHX[i]=pointHX[i]+120;//坐标平移
pointHY[i]=pointHY[i]+120;
}
secondLine=newLine2D.Double(0,0,0,0);
muniteLine=newLine2D.Double(0,0,0,0);
hourLine=newLine2D.Double(0,0,0,0);
secondTime.start();//秒针开始计时
}
publicvoidpaint(Graphicsg)
{for(inti=0;i<60;i++)//绘制表盘上的小刻度和大刻度
{intm=(int)pointSX[i];
intn=(int)pointSY[i];
if(i%5==0)
{g.setColor(Color.red);
g.fillOval(m-4,n-4,8,8);
}
else
{g.setColor(Color.cyan);
g.fillOval(m-2,n-2,4,4);
}
}
g.fillOval(115,115,10,10);//钟表中心的实心圆
Graphics2Dg_2d=(Graphics2D)g;
g_2d.setColor(Color.red);
g_2d.draw(secondLine);
BasicStrokebs=
newBasicStroke(3f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER);
g_2d.setStroke(bs);
g_2d.setColor(Color.blue);
g_2d.draw(muniteLine);
bs=newBasicStroke(6f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER);
g_2d.setStroke(bs);
g_2d.setColor(Color.green);
g_2d.draw(hourLine);
}
publicvoidactionPerformed(ActionEvente)
{if(e.getSource()==secondTime)
{date=newDate();
Strings=date.toString();
hour=Integer.parseInt(s.substring(11,13));
munite=Integer.parseInt(s.substring(14,16));
second=Integer.parseInt(s.substring(17,19));//获取时间中的秒
inth=hour%12;
a=second;//秒针端点的坐标
b=munite;//分针端点的坐标
c=h5+munite/12;//时针端点的坐标
secondLine.setLine(120,120,(int)pointSX[a],(int)pointSY[a]);
muniteLine.setLine(120,120,(int)pointMX[b],(int)pointMY[b]);
hourLine.setLine(120,120,(int)pointHX[c],(int)pointHY[c]);
repaint();
}
}
}
publicclassExample14_12
{publicstaticvoidmain(Stringargs[])
{Framewin=newFrame();
win.add(newClock(),BorderLayout.CENTER);
win.setVisible(true);
win.setSize(246,280);
win.validate();
win.addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{System.exit(0);
}
});
}
}
例子13
importjava.applet.;
importjava.awt.;
publicclassExample14_13extendsApplet
{Imageimg;
publicvoidstart()
{img=getImage(getCodeBase(),"vintdev.jpg");
}
publicvoidpaint(Graphicsg)
{g.drawImage(img,22,72,100,100,this);
}
}
例子14
importjava.awt.;
importjava.awt.event.;
classImagecanvasextendsCanvas
{Toolkittool;
Imageimage;
Imagecanvas()
{setSize(200,200);
tool=getToolkit();//得到一个Toolkit对象。
image=tool.getImage("dog.gif");//由tool负责获取图像。
}
publicvoidpaint(Graphicsg)
{g.drawImage(image,10,10,image.getWidth(this),image.getHeight(this),this);
}
publicImagegetImage()
{returnimage;
}
}
publicclassExample14_14
{publicstaticvoidmain(Stringargs[])
{Imagecanvascanvas=newImagecanvas();
Frameframe=newFrame();
frame.add(canvas,BorderLayout.CENTER);
frame.setSize(300,300);
frame.setVisible(true);
frame.setIconImage(canvas.getImage());
frame.validate();
frame.addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{System.exit(0);
}
});
}
}
例子15
importcom.sun.image.codec.jpeg.;
importjava.awt.image.;
importjava.awt.;
importjava.util.;
importjava.awt.event.;
importjava.io.;
classPaintCanvasextendsCanvas
{intx=-1,y=-1;
Vectorv=newVector();
BufferedImageimage;
Graphics2Dg2D;
PaintCanvas()
{image=newBufferedImage(300,300,BufferedImage.TYPE_INT_RGB);
g2D=image.createGraphics();
addMouseMotionListener(newMouseMotionAdapter()
{publicvoidmouseDragged(MouseEvente)
{x=(int)e.getX();y=(int)e.getY();
Pointp=newPoint(x,y);
v.addElement(p);
if(x!=-1&&y!=-1)
{for(inti=0;i {Pointp1=(Point)v.elementAt(i);
Pointp2=(Point)v.elementAt(i+1);
//在图像image上绘制
g2D.drawLine(p1.x,p1.y,p2.x,p2.y);
}
repaint();
}
}
}
);
addMouseListener(newMouseAdapter()
{publicvoidmouseReleased(MouseEvente)
{v.removeAllElements();
}
}
);
}
publicvoidpaint(Graphicsg)
{g.drawImage(image,0,0,this);//将内存中的图像iamge绘制在画布上
}
publicvoidupdate(Graphicsg)
{paint(g);
}
}
classWindowCanvasextendsFrameimplementsActionListener
{PaintCanvascanvas=newPaintCanvas();
Buttonbutton=newButton("save");
WindowCanvas()
{button.addActionListener(this);
add(canvas,BorderLayout.CENTER);
add(button,BorderLayout.NORTH);
setBounds(100,100,400,400);
setVisible(true);
}
publicvoidactionPerformed(ActionEvente)
{try{JPEGImageEncoderencoder=
JPEGCodec.createJPEGEncoder(newFileOutputStream("A.jpg"));
encoder.encode(canvas.image);
}
catch(Exceptionee){}
}
}
publicclassJPG
{publicstaticvoidmain(Stringargs[])
{newWindowCanvas();
}
}
例子16
importjava.awt.;importjava.applet.;
publicclassPaintTestextendsApplet
{publicvoidinit()
{setBackground(Color.yellow);
}
publicvoidpaint(Graphicsg)
{g.setXORMode(Color.red);
g.setColor(Color.green);
g.fillRect(20,20,80,40);
g.setColor(Color.yellow);
g.fillRect(60,20,80,40);
g.setColor(Color.green);
g.fillRect(20,70,80,40);
g.fillRect(60,70,80,40);
g.drawLine(100,100,200,200);
g.drawLine(100,100,220,220);//该直线消失
}
}
例子17
importjava.awt.;
importjava.awt.event.;
importjava.awt.geom.;
publicclassExample14_17
{publicstaticvoidmain(Stringargs[])
{Framef=newFrame();
f.setSize(170,170);
f.setVisible(true);
f.addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{System.exit(0);
}
});
PrintJobp=f.getToolkit().getPrintJob(f,"ok",null);
Graphicsg=p.getGraphics();
g.drawRect(30,30,40,40);
g.dispose();
p.end();
}
}
|
|