|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Как переставить пикселы изображения В листинге 15.4 определяется преобразование пикселов изображения. Создается новый фильтр — расширение shiftFiiter класса imageFilter, сдвигающее изображение циклически вправо на указанное в конструкторе число пикселов. Все, что для этого нужно, — это переопределить метод setPixels(). Листинг 15.4. Циклический сдвиг изображения import j ava.awt.*; import j ava.awt.event.*; import j ava.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).
Риc. 15.4. Перестановка пикселов изображения
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||