Как переставить пикселы изображения
В листинге 15.4 определяется преобразование пикселов изображения. Создается новый фильтр – расширение Shiftfilter класса imageFilter, сдвигающее изображение циклически вправо на указанное в конструкторе число пикселов. Все, что для этого нужно, – это переопределить метод setPixels().
Листинг 15.4. Циклический сдвиг изображения.
import java.awt.*; import java.awt.event.*; import java.awt.image.*; class SHIFTlmage extends Frame{ private Image img, newimg; SHIFTlmage(String s){ super(s); // 1. Получаем изображение из файла img = getToolkit().getlmage("javalogo52x88.gif"); // 2. Создаем экземпляр фильтра ImageFilter imf = new SHIFTFiiter(26); // Сдвиг на 26 пикселов // 3. Получаем новые пикселы с помощью фильтра ImageProducer ip = new FilteredlmageSource(img.getSource(), imf); // 4. Создаем новое изображение newimg = createlmage(ip); setSize(300, 200); setvisible(true); } public void paint(Graphics gr){ gr.drawlmage(img, 20, 40, this); gr.drawlmage(newimg, 100, 40, this); } public static void main(StringU args){ Frame f= new SHIFTImage(" Циклический сдвиг изображения"); f.atidWindowListener(new WindowAdapter()( public void windowClosing(WindowEvent ev){ System.exit(0);) }); } } // Класс-фильтр class SHIFTFilter extends ImageFilterf private int sh; // Сдвиг на sh пикселов вправо. public SHIFTFilter(int SHIFT)!{ sh = SHIFT; } public void setPixels(int x, int y, int w, int h, ColorModel m, byte[] pix, int off, int size){ for (int k = x; k < x+w; k++){ if (k+sh <= w) consumer.setPixels(k, y, 1, h, m, pix, off+sh+k, size); else consumer.setPixels(k, y, 1, h, m, pix, off+sh+k-w, size); } } }
Как видно из листинга 15.4, переопределение метода setPixels () заключается в том, чтобы изменить аргументы этого метода, переставив, тем самым, пикселы изображения, и передать их потребителю consumer – полю класса imageFiiter методом setPixels () потребителя. На рис. 15.4 показан результат выполнения этой программы.
Вторая модель обработки изображения введена в Java 2D. Она названа моделью прямого доступа (immediate mode model).
Рис. 15.4. Перестановка пикселов изображения