programming-examples/java/Computer_Graphics/Texture2DExample.java

77 lines
2.5 KiB
Java
Raw Normal View History

2019-11-15 12:59:38 +01:00
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
/**
* An example for the use of textures.
*
* @author Frank Klawonn
* Last change 27.05.2005
*/
public class Texture2DExample extends Frame
{
//The loaded image is saved in this object.
private Image theImage;
//The required TexturePaint.
private BufferedImage buffi;
/**
* Constructor
*/
public Texture2DExample()
{
//Enables the closing of the window.
addWindowListener(new MyFinishWindow());
//Here the JPEG-image for the texture is loaded to the Image object.
theImage = new javax.swing.ImageIcon("image1.jpg").getImage();
//TexturePaint requires a BufferedImage. Therefore, the Image
//must be drawn onto a BufferedImage.
buffi = new BufferedImage(theImage.getWidth(null),
theImage.getHeight(null),
BufferedImage.TYPE_INT_RGB);
Graphics2D g2dbuffi = buffi.createGraphics();
g2dbuffi.drawImage(theImage,0,0,null);
}
public void paint(Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
//The texture should be drawn once within this rectangle.
Rectangle2D.Double rect = new Rectangle2D.Double(50,90,80,200);
//Save the original clipping area.
Shape clipShape = g2d.getClip();
//Clipping w.r.t. to the rectangle.
g2d.setClip(rect);
//Fill the rectangle with the texture.
//The small texture does not fill the rectangle completely.
g2d.drawImage(theImage,50,50,null);
//Reset the original clipping area.
g2d.setClip(clipShape);
//For illustration purposes the sides of the rectangle are drawn.
//The rectangle is not filled completely by the texture.
g2d.setStroke(new BasicStroke(3.0f));
g2d.draw(rect);
//Fill an ellipse repeatedly by a texture.
TexturePaint tp = new TexturePaint(buffi,new Rectangle(0,0,
buffi.getWidth(),
buffi.getHeight()));
g2d.setPaint(tp);
Ellipse2D.Double elli = new Ellipse2D.Double(250,50,300,500);
g2d.fill(elli);
}
public static void main(String[] argv)
{
Texture2DExample f = new Texture2DExample();
f.setTitle("Textures");
f.setSize(600,600);
f.setVisible(true);
}
}