Изображения и звук Обработка исключительных ситуаций

Материаловедение
Электропроводность твёрдых
диэлектриков
Пределы
Курс лекций по ТОЭ
и типовые задания
Информационные процессы
и технологии
Архитектура персонального компьютера
Операционная система Windows
Microsoft Word работа с документами
Microsoft Access СУБД
Microsoft Excel работа с электронными таблицами
Локальные сети Работа пользователя в сети
Работа в Интернет Электронная почта
Защита компьютерной информации
Алгоритмы и программирование Паскаль
Натуральные и комплексные
числа
Теория информационных
процессов
Эффективная организация обмена информации
Непрерывный или аналоговый сигналы
Дискретизированный или дискретно непрерывные сигналы
Дискретные по уровню или квантованные сигналы
Дискретные по уровню и по времени сигналы
Совокупность технических средств
Количество информации в дискретном сообщении
Энтропия
Свойства энтропии
Энтропия объединения нескольких источников
Условная энтропия и взаимная информация
Дискретные источники сообщений с памятью
Производительность источника дискретных сообщений
Пропускная способность дискретного канала
Задача согласования дискретного источника с дискретным каналом без шума
Кодирование
Теорема Шеннона для канала без шума
Второй способ доказательства прямой теоремы Шеннона
Цифровые сети для
передачи речи и данных
Задача согласования дискретного источника
Теорема Шеннона для дискретного канала с шумом
Методика построения помехоустойчивых кодов
Непрерывные сообщения. Квантование и дискретизация
АИМ - сигнал и его спектр
Математическая модель дискретизированного сигнала
Теорема Котельникова
Оценка ошибок дискретизации
Спектр реального сигнала
Интерполирующий фильтр
Информация в непрерывных сообщениях
Дифференциальная энтропия
Наибольшая дифференциальная энтропия
Энтропия и производительность
Пропускная способность непрерывного канала
Информационный подход
Оценка ошибок квантования
Дифференцирование и
интегральное исчисление
Уязвимость операционных
систем
Узлы компьютера БП
Анализ систем безопасности
Обьектовая концепция Delphi
Встроенные типы данных
Объектно-ориентированное
программирование
Классы-оболочки
графический интерфейс
Основные компоненты
Изображения и звук
Инженерная графика

Как уже упоминалось в предыдущей главе, изображение в Java — это объект класса image. Там же показано, как в апплетах применяются методы getlmageо для создания этих объектов из графических файлов.

  • Модель обработки "поставщик-потребитель"
    • Как выделить фрагмент изображения В листинге 15.2 выделяется фрагмент изображения и выводится на экран в увеличенном виде. Кроме того, ниже выводятся изображения, увеличенные с помощью классов RepiicateScaieFiiter и AreaAveragingScaleFilter.
  • Модель обработки прямым доступом Подобно тому, как вместо класса Graphics система Java 2D использует его расширение Graphics2D, описанное в главе 9, вместо класса image в Java 2D употребляется его расширение — класс Bufferedimage
    • Аффинное преобразование изображения Класс AffineTransform и его использование подробно разобраны в главе 9, здесь мы только применим его для преобразования изображения.
    • Изменение интенсивности изображения Изменение интенсивности изображения выражается математически в умножении каждой составляющей цвета на число factor и прибавлении к результату умножения числа offset. Результат приводится к диапазону значений составляющей. После этого интенсивность каждой составляющей цвета линейно изменяется в одном и том же масштабе.
    • Изменение составляющих цвета Чтобы изменить отдельные составляющие цвета, надо прежде всего посмотреть тип хранения элементов в Bufferedimage, по умолчанию это TYPE_INT_RGB.
  • Анимация Есть несколько способов создать анимацию. Самый простой из них — записать заранее все необходимые кадры в графические файлы, загрузить их в оперативную память В виде Объектов класса Image или Bufferedlmage и выводить по очереди на экран.
    • Улучшение изображения двойной буферизацией Суть двойной буферизации в том, что в оперативной памяти создается буфер — объект класса image или Bufferedimage, и вызывается его графический контекст, в котором формируется изображение. Там же происходит очистка буфера, которая тоже не отражается на экране. Только после выполнения всех действий готовое изображение выводится на экран.
  • Звук Как было указано в предыдущей главе, в апплетах реализуется интерфейс Audioclip
  • Проигрывание звука в Java 2 Проигрыватель звука, встроенный в JVM, рассчитан на два способа записи звука: моно и стерео оцифровку (digital audio) с частотой дискретизации (sample rate) от 8 000 до 48 000 Гц и аппроксимацией (quantization) 8 и 16 битов, и MIDI-последовательности (sequences) типа 0 и 1.
  • Синтез и запись звука в Java 2 Синтез звука заключается в создании MIDI-последовательности — объекта класса sequence — каким-либо способом: с микрофона, линейного входа, синтезатора, из файла, или просто создать в программе, как это делается в листинге 15.18.
Обработка исключительных ситуаций Исключительные ситуации (exceptions) могут возникнуть во время выполнения (runtime) программы, прервав ее обычный ход. К ним относится деление на нуль, отсутствие загружаемого файла, отрицательный или вышедший за верхний предел индекс массива, переполнение выделенной памяти и масса других неприятностей, которые могут случиться в самый неподходящий момент.

  • Блоки перехвата исключения
  • Часть заголовка метода throws То обстоятельство, что метод не обрабатывает возникающее в нем исключение, а выбрасывает (throws) его, следует отмечать в заголовке метода служебным словом throws и указанием класса исключения
  • Оператор throw Этот оператор очень прост: после слова throw через пробел записывается объект класса-исключения. Достаточно часто он создается прямо в операторе throw, например
  • Иерархия классов-исключений Все классы-исключения расширяют класс Throwabie — непосредственное расширение класса object.
  • Порядок обработки исключений Блоки catch () {} перехватывают исключения в порядке написания этих блоков. Это правило приводит к интересным результатам.
  • Создание собственных исключений Прежде всего, нужно четко определить ситуации, в которых будет возникать ваше собственное исключение, и подумать, не станет ли его перехват невольно перехватывать также и другие, не учтенные вами исключения.
  • Подпроцессы Основное понятие современных операционных систем — процесс (process). Как и все общие понятия, процесс трудно определить, да это и не входит в задачу книги. Можно понимать под процессом выполняющуюся (runnable) программу, но надо помнить о том, что у процесса есть несколько состояний. Процесс может в любой момент перейти к выполнению машинного кода другой программы, а также "заснуть" (sleep) на некоторое время, приостановив выполнение программы. Он может быть выгружен на диск. Количество состояний процесса и их особенности зависят от операционной системы.
  • Класс Thread
  • Синхронизация подпроцессов Основная сложность при написании программ, в которых работают несколько подпроцессов — это согласовать совместную работу подпроцессов с общими ячейками памяти.
  • Согласование работы нескольких подпроцессов Возможность создания многопоточных программ заложена в язык Java с самого его создания. В каждом объекте есть три метода wait о и один метод notify о, позволяющие приостановить работу подпроцесса с этим объектом, позволить другому подпроцессу поработать с объектом, а затем уведомить (notify) первый подпроцесс о возможности продолжения работы. Эти методы определены прямо в классе object и наследуются всеми классами.
  • Приоритеты подпроцессов Планировщик подпроцессов виртуальной машины Java назначает каждому подпроцессу одинаковое время выполнения процессором, переключаясь с подпроцесса на подпроцесс по истечении этого времени. Иногда необходимо выделить какому-то подпроцессу больше или меньше времени по сравнению с другим подпроцессом.
  • Подпроцессы-демоны Работа программы начинается с выполнения метода main о главным подпроцессом. Этот подпроцесс может породить другие подпроцессы, они, в свою очередь, способны породить свои подпроцессы. После этого главный подпроцесс ничем не будет отличаться от остальных подпроцессов.
  • Потоки ввода/вывода Программы, написанные нами в предыдущих главах, воспринимали информацию только из параметров командной строки и графических компонентов, а результаты выводили на консоль или в графические компоненты. Однако во многих случаях требуется выводить результаты на принтер, в файл, базу данных или передавать по сети.
  • Консольный ввод/вывод
  • Файловый ввод/вывод Поскольку файлы в большинстве современных операционных систем понимаются как последовательность байтов, для файлового ввода/вывода создаются байтовые потоки с помощью классов Fiieinputstream и FiieOutputstream. Это особенно удобно для бинарных файлов, хранящих байт-коды, архивы, изображения, звук.
  • Получение свойств файла В конструкторах классов файлового ввода/вывода, описанных в предыдущем разделе, указывалось имя файла в виде строки. При этом оставалось неизвестным, существует ли файл, разрешен ли к, нему доступ, какова длина файла.
  • Буферизованный ввод/вывод Операции ввода/вывода по сравнению с операциями в оперативной памяти выполняются очень медленно. Для компенсации в оперативной памяти выделяется некоторая промежуточная область — буфер, в которой постепенно накапливается информация. Когда буфер заполнен, его содержимое быстро переносится процессором, буфер очищается и снова заполняется информацией.
  • Поток простых типов Java Класс DataOutputstream позволяет записать данные простых типов Java в выходной поток айтов методами writeBoolean (boolean b), writeBytefint b), writeShort(int h), writeChar(int c), writelnt"(int n), writeLong(long 1), writeFloat(float f), writeDouble(double d).
  • Прямой доступ к файлу Если необходимо интенсивно работать с файлом, записывая в него данные разных типов Java, изменяя их, отыскивая и читая нужную информацию, то лучше всего воспользоваться методами класса RandomAccessFile.
  • Сериализация объектов Методы классов ObjectlnputStream и ObjectOutputStream позволяют прочитать из входного байтового потока или записать в выходной байтовый поток данные сложных типов — объекты, массивы, строки — подобно тому, как методы классов Datainputstream и DataOutputstream читают и записывают данные простых типов.
  • Печать в Java Печать текстового файла заключается в размещении его строк в графическом контексте методом drawstring (). При этом необходимо проследить за правильным размещением строк в области печати и разбиением файла на страницы.
  • Печать средствами Java 2D Расширенная графическая система Java 2D предлагает новые интерфейсы и классы для печати, собранные в пакет java.awt.print. Эти классы полностью перекрывают все стандартные возможности печати библиотеки AWT. Более того, они удобнее в работе и предлагают дополнительные возможности.
    • Печать файла Поскольку принтер — устройство графическое, вывод на печать очень похож на вывод графических объектов на экран. Поэтому в Java средства печати входят в графическую библиотеку AWT и в систему Java 2D.
    • Печать страниц с разными параметрами Печать вида Printable Job не совсем удобна — у всех страниц должны быть одинаковые параметры, нельзя задать число страниц и порядок их печати, в окне Параметры страницы не видно число страниц, выводимых на печать.
  • Сетевые средства Java Когда число компьютеров в учреждении переваливает за десяток и сотрудникам надоедает бегать с дискетами друг к другу для обмена файлами, тогда в компьютеры вставляются сетевые карты, протягиваются кабели и компьютеры объединяются в сеть. Сначала все компьютеры в сети равноправны, они делают одно и то же — это одноранговая (peer-to-peer) сеть
  • Работав WWW
  • Работа по протоколу TCP Программы-серверы, прослушивающие свои порты, работают под управлением операционной системы. У машин-серверов могут быть самые разные операционные системы, особенности которых передаются программам-серверам.
  • Работа по протоколу UDP Для посылки дейтаграмм отправитель и получатель создают сокеты дейта-граммного типа. В Java их представляет класс DatagramSocket. В классе три конструктора:
  • Переход к Swing В части 3 мы подробно рассмотрели возможности графической библиотеки AWT. Там же мы заметили, что в состав Java 2 SDK входит еще одна графическая библиотека, Swing, с более широкими возможностями, чем AWT. Фирма SUN настоятельно рекомендует использовать Swing, а не AWT, но, во-первых, Swing требует больше ресурсов, что существенно для российского разработчика, во-вторых, большинство браузеров не имеет в своем составе Swing.
  • Архиватор jar Для упаковки нескольких файлов в один архивный файл, со сжатием или без сжатия., в технологии Java разработан формат JAR. Имя архивного jar-файла может быть любым, но обычно оно получает расширение jar. Способ упаковки и сжатия основан на методе ZIP. Название JAR (Java ARchive) перекликается с названием известной утилиты TAR (Tape ARchive), разработанной в UNIX.
    • Создание архива Jar-архивы создаются с помощью классов пакета java.util.jar или с помощью утилиты командной строки jar.
    • Файл описания MAN1FEST.MFВся информация сначала записывается в обычном текстовом файле с любым именем, например, manif. Потом запускается утилита jar, в которой этот файл указывается как значение параметра т
  • Компоненты JavaBeans Многие программисты предпочитают разрабатывать приложения с графическим интерфейсом пользователя с помощью визуальных средств разработки: JBuilder, Visual Age for Java, Visual Cafe и др. Эти средства позволяют помещать компоненты в контейнер графически, с помощью мыши.
  • Связь с базами данных через JDBC Большинство информации хранится не в файлах, а в базах данных. Приложение должно уметь связываться с базой данных для получения из нее информации или для помещения информации в базу данных.
  • Сервлеты В главе 19 была упомянута технология CGI. Ее суть в том, что сетевой клиент, обычно браузер, посылает Web-серверу информацию вместе с указанием программы, которая будет обрабатывать эту информацию. Web-сервер, получив информацию, запускает программу, передает информацию на ее стандартный ввод и ждет окончания обработки.
  • Java на сервере Тенденция написания сетевых программ — побольше функций возложить на серверную часть программы и поменьше оставить клиентской части, сделав клиент "тонким", а сервер "толстым". Это позволяет, с одной стороны, использовать клиентскую часть программы на самых старых и маломощных компьютерах, а с другой стороны, облегчает модификацию программы — все изменения достаточно сделать только в одном месте, на сервере.

Встроенные типы данных, операции над ними

Объектно-ориентированное программирование в Java

Классы-оболочки Классы-коллекции

Классы-утилиты графический интерфейс

Основные компоненты Размещение компонентов

Информатика Помехоустойчивые коды и их основные параметры Цифровые сети для передачи речи и данных