package graphtest; import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.RescaleOp; 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("gryvna.jpg"); try { MediaTracker mt = new MediaTracker(this); mt.addImage(img, 0); mt.waitForID(0); // очікування завершення завантаження } catch(InterruptedException e) {} // задання розмірів створюваної області bi таких, // що збігаються з розмірами зображения img System.out.print(img.getWidth(this)); 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 bw = bi.getWidth(this); int bh = bi.getHeight(this); // визначення області збереження перетвореного зображення, // розміри якої збігаються з розмірами початкого зображення BufferedImage bimg = new BufferedImage (bw, bh, BufferedImage.TYPE_INT_RGB); // Лінійне перетворення інтенсивностей x -> 255-x, що стврює негатив RescaleOp ro = new RescaleOp (-1f, 255f, null); ro.filter (bi, bimg); // виведення початкового зображенння. g2.drawImage (bi, null, 10, 10); // виведення спотвореного зображенння. g2.drawImage (bimg, null, 10, 170); } }