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

        

Изображение построенное по точкам



Листинг 15.1. Изображение, построенное по точкам

import java.awt.*;

import j ava.awt.event.*;

import java.awt.image.*;



class InMemory extends Frame {

private int w = 100, h = 100; 

private int[] pix = new int[w * h]; 

private Image img; 

InMemory(String s)( super(s);
 

int i = 0;

for (int у = 0; у < h; y++){ 

int red = 255 * у / (h - 1);
 

for (int x = 0; x < w; x++){ 

int green = 255 * x / (w — 1) ;

pix[i++] = (255 << 24)|(red << 16)|(green << 8)| 128; } }

setSize(250, 200);
 

setVisible(true);
 

}

public vqid paint(Graphics gr){ 

if (img == null)

img = createlmage(new MemoryImageSource<w, h, pix>
0, w));
 

gr.drawlmage(img, 50, 50, this);
 

public static void main(String[] args){

Frame f= new InMemory(" Изображение в памяти");
 

f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent ev){

System.exit (0);
 

}

});
 

}

В листинге 15.1 в конструктор класса-поставщика MemoryimageSource (w, h, pix, о, w) заносится ширина w и высота h изображения, массив pix, смещение в этом массиве о и длина строки w. Потребителем служит изображение img, которое создается методом createlmage () и выводится на экран методом drawlmage(img, 50, 50, this). Левый верхний угол изображения img располагается в точке (50, 50) контейнера, а последний аргумент this показывает, что роль imageObserver играет сам класс InMemory. Это заставляет включить в метод paint о проверку if (img == null), иначе изображение будет постоянно перерисовываться. Другой способ избежать этого — переопределить метод imageupdate (), о чем говорилось в главе 14, просто написав В нем return true.



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