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

Модель обработки "поставщик-потребитель"

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

Рис. 15.1 демонстрирует вывод, этой программы.

Иллюстрированный самоучитель по Java › Изображения и звук › Модель обработки "поставщик-потребитель"
Рис. 15.1. Изображение, созданное по точкам

Интерфейс imageConsumer описывает семь методов, самыми важными из которых являются два метода setPixeis (). Первый:

setPixels(int x, int y, int width, int height, ColorModel model, byte[]
pix, int offset, int scansize);

Второй метод отличается только тем, что массив pix содержит элементы типа int.

К этим методам обращается поставщик для передачи пикселов потребителю. Передается прямоугольник шириной width и высотой height с заданным верхним левым углом (х, у), заполняемый пикселами из массива pix, начиная с индекса offset. Каждая строка занимает scansize элементов массива pix. Цвета пикселов определяются в цветовой модели model (обычно это модель RGB).

На рис. 15.2 показана иерархия классов, реализующих модель "поставщик-потребитель".

Иллюстрированный самоучитель по Java › Изображения и звук › Модель обработки "поставщик-потребитель"
Рис. 15.2. Классы, реализующие модель "поставщик-потребитель"

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