package graphtest; import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.ByteLookupTable; import java.awt.image.LookupOp; 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); byte s [] [] = new byte [3] [256]; for (int j = 0; j <256; j ++) { s[0][j] = (byte) (255); // червона складова. s[1][j] = (byte) (j); // зелена складова. s[2][j] = (byte) (j); // синя складова. } ByteLookupTable bt = new ByteLookupTable (0, s); LookupOp lop = new LookupOp (bt, null); lop.filter (bi, bimg); // виведення початкового зображенння. g2.drawImage (bi, null, 10, 10); // виведення спотвореного зображенння. g2.drawImage (bimg, null, 10, 170); } }