package graphtest; import javax.swing.*; import java.awt.*; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.awt.image.BufferedImageOp; public class Panel extends JPanel { private BufferedImage bi; @Override // переозначення методу малювання public void paint (Graphics g) {// завантаження зображення super.paint(g); Graphics2D g2 = (Graphics2D) g; Image img = getToolkit().getImage("cd.png"); try { MediaTracker mt = new MediaTracker(this); mt.addImage(img, 0); mt.waitForID(0); // очікування завершення завантаження } catch(InterruptedException e) {} // задання розмірів створюваної області bi таких, // що збігаються з розмірами зображения img bi = new BufferedImage(img.getWidth(this), img.getHeight(this), BufferedImage.TYPE_INT_RGB); // створення графічного контексту big зображення bi Graphics2D big = bi.createGraphics(); // виведення зображення img у графічний контекст big big.drawImage(img, 0, 0, this); int w = getSize().width; int bw = bi.getWidth(this); AffineTransform at = new AffineTransform(); at.rotate(Math.PI/4); // поворот на 45º за напрямком руху годинникової // стрілки навколо лівого верхнього кута // наступний зсув праворуч на величину bw - ширину зображення. at.preConcatenate(new AffineTransform(1, 0, 0, 1, bw, 0)); // визначення області збереження перетвореного зображення, // розміри якої удвічі перевищують розміри початкого зображення BufferedImage bimg = new BufferedImage(2*bw, 2*bw, BufferedImage.TYPE_INT_RGB); // створення об'єкта biop, що містить створене перетворення at. BufferedImageOp biop = new AffineTransformOp(at,AffineTransformOp.TYPE_NEAREST_NEIGHBOR); // перетворення зображення і зберігання результату в bimg. biop.filter(bi, bimg); // виведення початкового зображенння. g2.drawImage(bi, null, 10, 30); // виведення спотворену перетворенням biop в область bi. g2.drawImage(bi, biop, w/4+3, 30); // виведення спотворене всередині области bimg зображення g2.drawImage(bimg, null, w/2+3, 30); } }