русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Класс PixelGrabber


Дата добавления: 2015-06-12; просмотров: 1328; Нарушение авторских прав


Класс 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() определяется с такими сигнатурами:

boolean grabPixels() throws InterruptedException

boolean grabPixels(long milliseconds) throws InterruptedException

Оба метода возвращают true, если завершаются успешно, и false — в противном случае. Во второй форме параметр milliseconds определяет, как долго метод будет ожидать пикселы.

Далее показан пример, который "захватывает" пикселы изображения и затем создает гистограмму их яркости. Под гистограммой яркости здесь понимается распределение количества пикселов с определенной яркостью по всем значениям шкалы яркости (от 0 до 255). После того как апплет рисует изображение, он выводит (поверх этого изображения) гистограмму его яркости (рис. 23.6).



Программа 137. Гистограмма яркости изображения

// Файл HistoGrab.java

/*

<applet code = HistoGrab.class width = 341 height = 400>

<param name = img value = Gerl.jpg>

</applet>

*/

import java.applet.*;

import java.awt.*;

import java.awt.image. *;

public class HistoGrab extends Applet {

Dimension d;

Image img;

int iw, ih;

int pixels[];

int w, h;

int hist[] = new int [256];

int max_hist = 0;

public void init() {

d = getSize();

w = d.width;

h = d.height;

try {

img = getImage(getDocumentBase(), getParameter ("img"));

MediaTracker t = new MediaTracker(this);

t.addImage(img, 0);

t.waitForID(0);

iw = img.getWidth(null);

ih = img.getHeight(null);

pixels = new int[iw * ih];

PixelGrabber pg = new PixelGrabber(img, 0, 0, iw, ih,

pixels, 0, iw);

pg.grabPixels();

}

catch (InterruptedException e) { };

for (int i = 0; i < iw * ih; i++) {

int p = pixels[i];

int r = 0xff & (p >> 16);

int g = 0xff & (p >> 8);

int b = 0xff & (p);

int y = (int) (.33 * r + .56 * g + .11 * b);

hist[y]++;

}

for (int i = 0; i < 256; i++) {

if (hist[i] > max_hist)

max_hist = hist[i];

}

}

public void update() {}

public void paint(Graphics g) {

g.drawImage(img, 0, 0, null);

int x = (w - 256) / 2;

int lasty = h - h * hist[0] / max_hist;

for (int i = 0; i < 256; i++, x++) {

int y = h - h * hist[i] / max_hist;

g.setColor(new Color(i, i, i));

g.fillRect(x, y, 1, h);

g.setColor(Color.red);

g.drawLine (x - 1, lasty, x, y);

lasty = y;

}

}

}

На рис. 6 показан пример гистограммы яркости изображения.

Рис. 6. Гистограмма яркости изображения



<== предыдущая лекция | следующая лекция ==>
Производитель изображений MemorylmageSource | Класс ImageFilter


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.256 сек.