Класс PixelGrabber определен в java.lang.image. Это инверсия класса MemoryImageSource. Вместо построения изображения из массива пикселных значений, он берет существующее изображение и строит из него массив пикселов. Для использования PixelGrabber вы сначала организуете int-массив достаточно большой, чтобы содержать данные пикселов, и затем создаете экземпляр PixelGrabber, передавая ему прямоугольную область, которую вы хотите преобразовать в пикселное представление. Наконец, вы вызываете метод grabPixels() этого экземпляра.
Конструктор PixelGrabber, который используется в этой главе, имеет следующую форму:
PixelGrabber (Image imgObj, int left, int top, int width, int height,
int pixel[ ], int offset, int scanbineWxdth)
Здесь imgObj — объект, чьи пикселы преобразуются. Значения left и top определяют левый верхний угол прямоугольника, a width и height — его размеры, из которого будут получены пикселы. Пикселы будут сохранены в массиве pixel, со смещением offset. Ширину строки сканирования (которая часто такая же, как ширина изображения) задают в scanLineWidth.
Метод grabPixels() определяется с такими сигнатурами:
Оба метода возвращают true, если завершаются успешно, и false — в противном случае. Во второй форме параметр milliseconds определяет, как долго метод будет ожидать пикселы.
Далее показан пример, который "захватывает" пикселы изображения и затем создает гистограмму их яркости. Под гистограммой яркости здесь понимается распределение количества пикселов с определенной яркостью по всем значениям шкалы яркости (от 0 до 255). После того как апплет рисует изображение, он выводит (поверх этого изображения) гистограмму его яркости (рис. 23.6).