Image offline rendering : Buffer Paint « 2D Graphics GUI « Java






Image offline rendering

Image offline rendering

import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.InputStream;

import javax.swing.JFrame;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageDecoder;

public class ImageDuplicity extends Component {
  private BufferedImage image;

  public void paint(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    if (image == null)
      createOffscreenImage();
    g2.drawImage(image, 0, 0, this);
  }

  private void createOffscreenImage() {
    Dimension d = getSize();
    int width = d.width; 
    int height = d.height;
    image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

    Graphics2D g2 = image.createGraphics();
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
        RenderingHints.VALUE_ANTIALIAS_ON);

    try {
      String filename = "largeJava2sLogo.jpg";
      InputStream in = getClass().getResourceAsStream(filename);
      JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);
      BufferedImage image = decoder.decodeAsBufferedImage();
      in.close();
      g2.drawImage(image, 0, 0, width, height, null);
    } catch (Exception e) {
      System.out.print(e);
    }

    g2.setStroke(new BasicStroke(2));
    Color[] colors = { Color.red, Color.blue, Color.green };
    for (int i = -32; i < 40; i += 8) {
      g2.setPaint(colors[Math.abs(i) % 3]);
      g2.drawOval(i, i, width - i * 2, height - i * 2);
    }
  }
  public static void main(String[] args) {
    JFrame f = new JFrame();
    f.setLayout(new BorderLayout());
    Component c = new ImageDuplicity();
    f.add(c, BorderLayout.CENTER);
    f.setSize(200, 250);
    f.setVisible(true);
  }
}

           
       








Related examples in the same category

1.Demos of a custom buffered image operationDemos of a custom buffered image operation
2.Buffered draw without flickerBuffered draw without flicker
3.Smooth move using double bufferSmooth move using double buffer
4.Data Buffer Grabber
5.Composite BufferedImage
6.RepaintManager.currentManager(null).setDoubleBufferingEnabled(false)
7.repaint just the affected part of the component
8.Create a multiple buffer strategy with the number of buffers given