Изменение интенсивности изображения
Изменение интенсивности изображения выражается математически в умножении каждой составляющей цвета на число factor и прибавлении к результату умножения числа offset. Результат приводится к диапазону значений составляющей. После этого интенсивность каждой составляющей цвета линейно изменяется в одном и том же масштабе.
Числа factor и offset постоянны для каждого пиксела и задаются в конструкторе класса вместе с правилами визуализации hints:
RescaleOp(float factor, float^offset, RenderingHints hints)
После этого остается применить метод filter ().
На рис. 15.7 интенсивность каждого цвета уменьшена вдвое, в результате белый фон стал серым, а цвета – темнее. Затем интенсивность увеличена на 70 единиц.
В листинге 15.6 приведена программа, выполняющая это преобразование.
Листинг 15.6. Изменение интенсивности изображения.
import Java.awt.*; import java.awt.image.*; import java.awt.event.*; public class Rescale extends Frame{ private Bufferedlmage bi; public Rescale(String s){ super (s); Image img = getToolkit().getlmage("javalogo52x88.gif"); try{ MediaTracker mt = new MediaTracker(this); mt.addlmage(img, 0); mt.waitForlD(O); } catch(Exception e){} bi = new Bufferedlmage(img.getWidth(this), img.getHeight(this), BufferedImage.TYPE_INT_RGB); Graphics2D big = bi.createGraphics(); big.drawlmage(img, 0, 0, this); } public void paint(Graphics g){ Graphics2D g2 = (Graphics2D)g; int w = getSize().width; int bw = bi.getWidth(this); int bh = bi.getHeight(this); Bufferedlmage bimg = new Bufferedlmage(bw, bh, BufferedImage.TYPE_INT_RGB); //– Начало определения преобразования – -– RescaleOp гор = new RescaleOp(0.5f, 70.Of, null); rop.filter(bi, bimg); //– Конец определения преобразования – g2.drawlmage(bi, null, 10, 30); g2.drawlmage(bimg, null, w/2+3, 30); } public static void main(String(] args){ Frame f = new Rescale(" Изменение интенсивности"); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } )); f.setSize(300, 200); f.setvisible(true); } }
Рис. 15.7. Изменение интенсивности изображения