Читайте также:
|
|
package ImageOps.java;import java.awt.*;import java.awt.geom.*;import java.awt.image.*;import java.awt.color.*; /** демонстрация фильтров обработки изображений */public class ImageOps implements GraphicsExample { static final int WIDTH = 600, HEIGHT = 675; // размеры public String getName() {return "Image Processing";}// Из GraphicsExample public int getWidth() { return WIDTH; } // Из GraphicsExample public int getHeight() { return HEIGHT; } // Из GraphicsExample Image image; /** Конструктор загрузки изображения */ public ImageOps() { java.net.URL imageurl = this.getClass().getResource("cover.gif"); image = new javax.swing.ImageIcon(imageurl).getImage(); } // переменные для фильтров изображений LookupImageOp static byte[] brightenTable = new byte[256]; static byte[] thresholdTable = new byte[256]; static { // инициализация массивов for(int i = 0; i < 256; i++) { brightenTable[i] = (byte)(Math.sqrt(i/255.0)*255); thresholdTable[i] = (byte)((i < 225)?0:i); } } // объект AffineTransform используется фильтром изображений static AffineTransform mirrorTransform; static { // создание и инициализация AffineTransform mirrorTransform = AffineTransform.getTranslateInstance(127, 0); mirrorTransform.scale(-1.0, 1.0); // отражение по горизонтали } // надписи под изображением static String[] filterNames = new String[] { "Original", "Gray Scale", "Negative", "Brighten (linear)", "Brighten (sqrt)", "Threshold", "Blur", "Sharpen", "Edge Detect", "Mirror", "Rotate (center)", "Rotate (lower left)" }; // объекты фильтров изображений BufferedImageOp // для выполнения операций над ними. static BufferedImageOp[] filters = new BufferedImageOp[] { // 1) Нет фильтра. Оригинальное изображение null, // 2) оттенки серого Grayscale new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null), // 3) негатив. Каждое значение умножаем на -1.0 и прибавляем 255 new RescaleOp(-1.0f, 255f, null), // 4) делаем ярче new RescaleOp(1.25f, 0, null), // 5) делаем ярче по таблице new LookupOp(new ByteLookupTable(0, brightenTable), null), // 6) обрезаем цвета по таблице new LookupOp(new ByteLookupTable(0, thresholdTable), null), // 7) размываем изображение new ConvolveOp(new Kernel(3, 3, new float[] {.1111f,.1111f,.1111f,.1111f,.1111f,.1111f,.1111f,.1111f,.1111f,})), // 8) контрастность изображения new ConvolveOp(new Kernel(3, 3, new float[] { 0.0f, -0.75f, 0.0f, -0.75f, 4.0f, -0.75f, 0.0f, -0.75f, 0.0f})), // 9) выделяем края new ConvolveOp(new Kernel(3, 3, new float[] { 0.0f, -0.75f, 0.0f, -0.75f, 3.0f, -0.75f, 0.0f, -0.75f, 0.0f})), // 10) зеркальное отображение new AffineTransformOp(mirrorTransform,AffineTransformOp.TYPE_BILINEAR), // 11) поворот на 180 градусов new AffineTransformOp(AffineTransform.getRotateInstance(Math.PI,64,95), AffineTransformOp.TYPE_NEAREST_NEIGHBOR), // 12) поворот на 15 градусов new AffineTransformOp(AffineTransform.getRotateInstance(Math.PI/12, 0, 190), AffineTransformOp.TYPE_NEAREST_NEIGHBOR), }; /** рисуем пример */ public void draw(Graphics2D g, Component c) { // Создаем BufferedImage большого объема, чтобы загрузить // изображение. Копируем его в новый // BufferedImage для последующей обработки. BufferedImage bimage = new BufferedImage(image.getWidth(c), image.getHeight(c), BufferedImage.TYPE_INT_RGB); Graphics2D ig = bimage.createGraphics(); ig.drawImage(image, 0, 0, c); // копируем изображение // установка атрибутов графики g.setFont(new Font("SansSerif", Font.BOLD, 12)); // 12pt жирный g.setColor(Color.green); // зеленый цвет g.translate(10, 10); // отступ от края // цикл по фильтрам for(int i = 0; i < filters.length; i++) { // если фильтр пуст, то вывод оригинала, // в противном случае согласно фильтра if (filters[i] == null) g.drawImage(bimage, 0, 0, c); else g.drawImage(filters[i].filter(bimage, null), 0, 0, c); g.drawString(filterNames[i], 0, 205); // подпись под изображен. g.translate(137, 0); // смещение if (i % 4 == 3) g.translate(-137*4, 215); // переход после 4 изображ. } }}
Дата добавления: 2015-09-11; просмотров: 66 | Поможем написать вашу работу | Нарушение авторских прав |