Affinetransform демо


import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Container;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.GridLayout;

import java.awt.Image;

import java.awt.MediaTracker;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.awt.geom.AffineTransform;

import java.awt.image.AffineTransformOp;

import java.awt.image.BufferedImage;



import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;



public class AffineTransformApp extends JFrame {

  DisplayPanel displayPanel;



  JComboBox scaleXval, scaleYval, shearXval, shearYval;



  String[] scaleValues = "0.10""0.25""0.50""0.75""1.00""1.25",

      "1.50""1.75""2.00" };



  String[] shearValues = "0.00""0.25""0.50""0.75""1.00" };



  public AffineTransformApp() {

    super();

    Container container = getContentPane();



    displayPanel = new DisplayPanel();

    container.add(displayPanel);



    JPanel panel = new JPanel();

    panel.setLayout(new GridLayout(2455));

    scaleXval = new JComboBox(scaleValues);

    scaleXval.setSelectedItem("1.00");

    scaleXval.addActionListener(new ComboBoxListener());

    scaleYval = new JComboBox(scaleValues);

    scaleYval.setSelectedItem("1.00");

    scaleYval.addActionListener(new ComboBoxListener());



    shearXval = new JComboBox(shearValues);

    shearXval.setSelectedItem("0.00");

    shearXval.addActionListener(new ComboBoxListener());

    shearYval = new JComboBox(shearValues);

    shearYval.setSelectedItem("0.00");

    shearYval.addActionListener(new ComboBoxListener());



    panel.add(new JLabel("Scale X value:"));

    panel.add(scaleXval);

    panel.add(new JLabel("Scale Y value:"));

    panel.add(scaleYval);

    panel.add(new JLabel("Shear X value:"));

    panel.add(shearXval);

    panel.add(new JLabel("Shear Y value:"));

    panel.add(shearYval);



    container.add(BorderLayout.SOUTH, panel);



    addWindowListener(new WindowAdapter() {

      public void windowClosing(WindowEvent e) {

        System.exit(0);

      }

    });

    setSize(displayPanel.getWidth(), displayPanel.getHeight() 10);

    setVisible(true);

  }



  public static void main(String arg[]) {

    new AffineTransformApp();

  }



  class ComboBoxListener implements ActionListener {

    public void actionPerformed(ActionEvent e) {

      JComboBox temp = (JComboBoxe.getSource();



      if (temp == scaleXval) {

        displayPanel.scalex = Double.parseDouble((Stringtemp

            .getSelectedItem());

        displayPanel.applyValue(true, false);

        displayPanel.applyFilter();

        displayPanel.repaint();

      else if (temp == scaleYval) {

        displayPanel.scaley = Double.parseDouble((Stringtemp

            .getSelectedItem());

        displayPanel.applyValue(true, false);

        displayPanel.applyFilter();

        displayPanel.repaint();

      else if (temp == shearXval) {

        displayPanel.shearx = Double.parseDouble((Stringtemp

            .getSelectedItem());

        displayPanel.applyValue(false, true);

        displayPanel.applyFilter();

        displayPanel.repaint();

      else if (temp == shearYval) {

        displayPanel.sheary = Double.parseDouble((Stringtemp

            .getSelectedItem());

        displayPanel.applyValue(false, true);

        displayPanel.applyFilter();

        displayPanel.repaint();

      }

    }

  }

}



class DisplayPanel extends JLabel {

  Image displayImage;



  BufferedImage biSrc, biDest;



  BufferedImage bi;



  Graphics2D big;



  AffineTransform transform;



  double scalex = 1.0;



  double scaley = 1.0;



  double shearx = 1.0;



  double sheary = 1.0;



  DisplayPanel() {

    setBackground(Color.black);

    loadImage();

    setSize(displayImage.getWidth(this), displayImage.getWidth(this))// panel

    createBufferedImages();



    transform = new AffineTransform();

  }



  public void loadImage() {

    displayImage = Toolkit.getDefaultToolkit().getImage(

        "largeJava2sLogo.jpg");

    MediaTracker mt = new MediaTracker(this);

    mt.addImage(displayImage, 1);

    try {

      mt.waitForAll();

    catch (Exception e) {

      System.out.println("Exception while loading.");

    }



    if (displayImage.getWidth(this== -1) {

      System.out.println(" Missing .jpg file");

      System.exit(0);

    }

  }



  public void createBufferedImages() {

    biSrc = new BufferedImage(displayImage.getWidth(this), displayImage

        .getHeight(this), BufferedImage.TYPE_INT_RGB);



    big = biSrc.createGraphics();

    big.drawImage(displayImage, 00this);



    bi = biSrc;



    biDest = new BufferedImage(displayImage.getWidth(this), displayImage

        .getHeight(this), BufferedImage.TYPE_INT_RGB);

  }



  public void applyValue(boolean scale, boolean shear) {

    if (scale) {

      transform.setToScale(scalex, scaley);

      scale = false;

    else if (shear) {

      transform.setToShear(shearx, sheary);

      shear = false;

    }

  }



  public void applyFilter() {

    AffineTransformOp op = new AffineTransformOp(transform, null);

    Graphics2D biDestG2D = biDest.createGraphics();

    biDestG2D

        .clearRect(00, biDest.getWidth(this), biDest.getHeight(this));

    op.filter(biSrc, biDest);

    bi = biDest;

  }



  public void reset() {

    big.setColor(Color.black);

    big.clearRect(00, bi.getWidth(this), bi.getHeight(this));

    big.drawImage(displayImage, 00this);

  }



  public void update(Graphics g) {

    g.clearRect(00, getWidth(), getHeight());

    paintComponent(g);

  }



  public void paintComponent(Graphics g) {

    super.paintComponent(g);

    Graphics2D g2D = (Graphics2Dg;

    g2D.drawImage(bi, 00this);

  }

}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>