Иллюстрированный самоучитель по Java

Как переставить пикселы изображения

В листинге 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).

Иллюстрированный самоучитель по Java › Изображения и звук › Как переставить пикселы изображения
Рис. 15.4. Перестановка пикселов изображения

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.