Книга: Основы программирования с Java
Назад: Демонстрация примера
Дальше: Пример

Демонстрация примера

Давайте теперь посмотрим на ColorImageDemo в среде разработки IntelliJ IDEA.





Здесь есть определение класса ColorImageDemo, как мы только что видели.

И есть метод main для запуска программы.

В этом методе мы создаем экземпляр класса ColorImageDemo, с помощью конструктора по умолчанию, используя настройки по умолчанию.







Изображение car1, то есть изображение по умолчанию, отображается на холсте в верхнем левом угле.







Затем мы с помощью ввода в консоли поворачиваем изображение, масштабируем его и перемещаем по холсту.

Вопросы

Задача







Каким будет вывод на экране, если методы set и оutput вызываются в следующей программе?

Варианты ответа:

1.      X: 50 Y: 100 A: 45

2.      X: 150 Y: 200 A: -45

3.      X: 50 Y: 150 A: -45

4.      X: 50 Y: 150 A: 45

5.      Compilation Error

Ответ: 3.

х и у координаты image1 установлены на 50 и 100 соответственно. Угол поворота изображения затем устанавливается на 45 (градусов). После этого, у-координата изображения обновляется на текущую х-координату изображения плюс 100 (т.е. 100 + 50 = 150).

Наконец, угол поворота изображения обновляется на текущий угол поворота минус 90 (т.е. 45 – 90 = -45 градусов).

Демонстрация примера

Я хочу немного больше сказать о классе ColorImage.







Как я уже говорил, ColorImage является своего рода объектом Canvas, который может быть отображен на холсте как двумерное изображение.

Было бы полезно иметь некоторое представление о том, как представляется 2D изображение, хотя вам не нужно знать все детали.

Давайте сначала посмотрим на черно-белое изображение, как показано здесь.







Оно может быть представлено в виде 2D матрицы чисел.

Эти цифры часто называют уровни серого, которые представлены в виде 8-разрядного байта.

Байт может принимать числа от 0 до 255.

В представлении 2D-изображений как уровней серого, 0 используется для представления полностью черного и 255 для белого цвета, а значения между ними для различной интенсивности серого.

Рисунок здесь показывает небольшую область изображения, и соответствующие ей уровни серого.

Каждый элемент 2D матрицы называется пикселем или элементом изображения.

Если вы изучали физику, тогда знаете, что полный цветовой спектр может быть представлен сочетанием трех основных цветов, красного, зеленого и синего или RGB.

Так, цветное изображение можно представить в виде трех слоев 2D изображения по одному для красного, зеленого и синего цветов.







Цветные изображения в классе ColorImage имеют еще один канал, называемый альфа-каналом, который представляет собой степень прозрачности.

Таким образом, 4 канала, R, G, B и Alpha, каждый из них занимает 8 бит и все они составляют в общей сложности 32 бит.

Это все, что я хотел сказать о представлении цветного изображения.

В дополнение к методам, которые изменяют положение и ориентацию ColorImage, существуют также методы для манипулирования значениями пикселей в ColorImage. Вот некоторые из этих методов.







Документация Javadoc дает полный список и подробные описания методов.

Вам на самом деле нужно будет использовать только некоторые из них для вашей лабораторной работы, например, чтобы добавить два изображения.

Я хочу показать вам интересную работу на цветных изображениях, которая позволила бы вам создавать 3-мерные изображения с помощью трех методов add, createCyanImage и createRedImage.

Метод createRedImage удалит зеленый и синий каналы из изображения и оставит только красный канал.

Метод createCyanImage удаляет красный канал и сохраняет зеленый и синий, и сочетание из оставшихся зеленого и синего каналов дает голубой цвет.

Итак, как мы можем создать 3D изображение.

Мы видим 3D, потому что у нас есть два глаза и два глаза немного по-разному смотрят на объекты вокруг нас.

Вы можете проверить это легко, закрыв один глаз, а затем другой. Вы увидите, что изображения немного отличаются, и наша зрительная система достаточно умна, чтобы интерпретировать такие различия для получения 3D информации.

Вы можете имитировать этот процесс путем размещения двух одинаковых камер бок о бок, чтобы сфотографировать окружающую среду.

Даже если у вас нет двух камер, можно использовать только одну, например, камеру вашего мобильного телефона.

Возьмите одну картину, а затем переместите ее по горизонтали на небольшое расстояние.

Расстояние не может быть слишком большим, иначе ваша зрительная система не сможет слить два изображения.







Теперь давайте откроем проект SimpleStereoCreator.







Вы видите, что программа начинается с импорта трех классов, класса IO,

класса Сanvas, класса ColorImage.

И имя нашего класса SimpleStereoCreator.

Тело определения класса начинается с объявления переменных экземпляра.

Здесь определяется размер создаваемого холста, а затем объявляются переменные экземпляра для холста, левого изображения leftImage, правого изображения rightImage и полученного стереоизображения.

Конструктор класса просто создает новый объект холста с заданной шириной и высотой.

И основной метод, который делает всю работу, это метод createStereo.

Вы видите, что он начинается с запроса у пользователя существующих левого и правого изображений.

Затем метод создает красное изображение, извлекая красный канал из левого изображения, а затем метод создает голубое изображение, извлекая синий и зеленый каналы из правого изображения.

При добавлении красного и голубого изображений, получается стереоизображение, а затем стереоизображение отображается на холсте.

Вы можете скомпилировать программу и здесь нет синтаксических ошибок.

Мы можем запустить программу путем создания экземпляра объекта, а затем вы можете вызвать метод createStereo.







Появится диалоговое окно, которое попросит у вас сначала левое изображение, а затем правое изображение.

И вы видите, что здесь создается стереоизображение.







Но как вы можете увидеть этот стереоэффект?

Вы можете просмотреть красное и синее стереоизображение с помощью красных и синих стереоочков.

Эффект может быть не так хорош, как когда вы смотрите фильмы в формате 3D в кинотеатре, но это даст вам простой метод для просмотра красно-синих стереоизображений.

Назад: Демонстрация примера
Дальше: Пример