Java -практика использования

         

Циклический сдвиг изображения



Листинг 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. Перестановка  пикселов изображения



Содержание раздела