Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга о KOL.doc
Скачиваний:
29
Добавлен:
30.04.2019
Размер:
1.77 Mб
Скачать

6.7.7. Прочие форматы изображений

Кроме вышеперечисленного, на основном сайте так же можно найти пакеты KOLPcx, KOLTga. Как следует из их названий, они обеспечивают работу (только загрузку и отображение, правда) форматов PCX и Targa. Впрочем, если вам надо получить не только эти два дополнительных формата, то выгоднее для работы с PCX-файлами, все-таки, воспользоваться библиотекой KOLGraphic, где так же имеется поддержка этого формата.

6.7.8. Дополнительные утилиты для работы с графикой

6.7.8.1. SmoothDIB

Этот пакет предоставляет объект TSmoothDIB, обеспечивающий ряд дополнительных возможностей для рисования на DIB-битмапах. А именно, рисование линий и других фигур из отрезков линий с так называемым антиалиасингом. Особенность в том, что ширина линии задается в виде числа с плавающей запятой, и само рисование происходит своим кодом через свойство Scanline объекта TBitmap.

6.7.8.2. KOLPlotter

Пакет для рисования графиков математических функций. Автор: Александр Шахайло.

6.7.8.3. Sprite Utils

Спрайтовый движок. Имеется поддержка Direct Draw. Автор: miek.

6.7.8.4. BIS

Сжатие изображений, содержащих большие участки, залитые одним цветом. Автор: miek.

6.7.8.5. KOLjanFx

Набор дополнительных графических эффектов. Конвертация для KOL: Dimaxx.

6.7.9. Open gl: модули kologl12 и OpenGlContext

Модуль KOLOGL12 не просто обеспечивает все объявления интерфейса Open GL, для этого можно использовать и стандартный модуль opengl из дистрибутива компилятора. Его особенность в том, что делает он это максимально экономным для размера приложения способом, что особенно важно для программирования с библиотекой KOL. Автор модуля, Вячеслав Гаврик, нашел прекрасный способ обойти необходимость обязательного подключения всех функций интерфейса библиотеки Open GL, и при этом сохранить высокую скорость обращений к ним.

Модуль OpenGLContext написан мной, и является простейшей ООП-надстройкой над множеством функций программного интерфейса библиотеки Open GL. Он предоставляет объект Context, через который осуществляется основная работа, а так же набор объектных типов для представления текстур, массивов вершин, источников освещения, материалов и прочего.

6.8. Звук и видео

6.8.1. KOLMediaPlayer

Изначально этот объект находился в основном составе KOL, но позже был вынесен в отдельный модуль. Основная причина такого решения была в необходимости уменьшить зависимости приложений от модуля MMSystem, содержащего нужные определения и не требующегося большинству приложений. Функционально объект TMediaPlayer из этого модуля мало чем отличается от того компонента, с которым вы, возможно, имели место в VCL. Но в KOL он не является визуальным, и не обеспечивает автоматически наличие кнопок для управления процессом проигрывания музыки или видеоизображения. Поскольку в объекте используются команды MCI (Media Control Interface), то с помощью этого объекта возможно воспроизвести любой медиа-файл, для которого в системе установлены все необходимые драйвера и декодеры (кодеки).

Основной порядок работы с данным объектом следующий. Создается он конструктором

NewMediaPlayer( filename, wnd ) – необязательный параметр файл (может быть пустой строкой) задает файл для воспроизведения, параметр wnd (так же может быть нулем – для звуковых файлов) передает конструктору объекта дескриптор окна, в котором будет воспроизводиться видеоизображение.

Свойства и методы высокого уровня:

Display – дескриптор окна для отображения видеоизображения;

DisplayRect – прямоугольник в окне Display, отведенный под изображение;

Width, Height – возвращают собственную ширину и высоту открытого видео-файла;

Filename – позволяет изменить имя файла для воспроизведения;

DeviceType – возвращает тип открытого файла, устанавливать его не обязательно, так как в случае файла система сама в состоянии определить формат данных;

DeviceID – возвращает идентификатор логического устройства, который может использоваться в командах низкого уровня;

TimeFormat – задает формат времени для оперирования я длиной и позицией в проигрываемом потоке (миллисекунды, байты, кадры – для видео, сэмплы – для звука, а так же некоторые форматированные значения, см. подробнее в тексте и в системной документации);

Lenght – возвращает длину файла (в единицах, заданных свойством TimeFormat);

Position – текущая позиция в файле или на устройстве (может быть изменена, если устройство содержит несколько дорожек, для получения начальной позиции дорожки следует использовать свойство TrackStartPosition);

TrackCount – число дорожек, для устройств с несколькими дорожками;

Track – номер текущей дорожки (от 1 до TrackCount);

TrackStartPosition – возвращает стартовую позицию текущей дорожки на устройстве;

TrackLength – длина текущей дорожки;

Error – код ошибки (если ошибок нет, содержит 0);

ErrorMessage – текст с описанием ошибки;

State – текущее состояние устройства (не готово, остановлено, идет воспроизведение, запись, поиск или перемотка и т.п.);

Wait – установите это свойство в значение TRUE для выполнения всех операций с синхронизацией (т.е., возврат из любой команды будет происходить только по завершению этой операции). По умолчанию, все операции выполняются асинхронно, то есть команда передается системе на выполнение, после чего управление возвращается вашему коду;

OnNotify – данное событие срабатывает, когда завершается предыдущая асинхронная операция;

Open – метод для открытия файла, заданного свойством Filename. Если при создании объекта параметр Filename указывал на существующий файл, то метод Open вызывается для него автоматически;

Alias – строка, которую после открытия файла возможно использовать в MCI-командах как псевдоним устройства. Следует устанавливать до открытия медиа-файла и до изменения имени файла;

Play( start, length ) – начинает воспроизведение открытого файла с указанной позиции, параметр length задает порцию для воспроизведения. В качестве параметра length (длина) допускается указание специального значения –1, которое означает, что файл будет проигрываться до конца файла. Для параметра start так же возможно указать значение –1, что означает «от текущей позиции»;

StartRecording( FromPos, ToPos ) – начинает запись на устройстве записи. Аналогично методу Play, специальное значения –1 так же может использоваться для обоих параметров, с таким же смысловым значением;

Pause – возвращает TRUE, если устройство приостановлено, так же может использоваться для программной приостановки устройства путем присваивания значения TRUE;

Stop – останавливает воспроизведение или запись;

Close – этот метод закрывает устройство (но не обязательно останавливает воспроизведение! Для остановки следует предварительно перевести устройство в состояние «пауза» или «остановлено»);

Ready – TRUE, если устройство «готово» (начать запись или воспроизведение);

Eject – выбрасывает носитель из устройства, если такая команда для него предусмотрена (например, для CDAudio);

DoorClose – обратная операция по отношению к Eject. Особенность этой операции в том, что для носителя может быть выполнена операция автоматического проигрывания или открытия, если эта настройка не отключена в операционной системе. Для предотвращения авто-открытия используйте операцию Insert;

Insert – аналогично DoorClose, но автоматическое проигрывание не срабатывает;

Present – возвращает TRUE, если носитель вставлен в устройство.

Далее я пропущу ряд свойств и методов низкого уровня, скажу только, что они позволяют получать более детализированную информацию, зависящую от типа устройства и носителя, управлять включением и выключением отдельных каналов, громкостью звука, и так далее. Остановлюсь только на командах самого низкого уровня, позволяющих передавать команды непосредственно системе MCI:

SendCommand( cmd, flags, buffer ) – позволяет отправить низкоуровневую команду устройству, передавая, при необходимости, какие-то параметры через буфер, например.

Имеется так же версия этого метода asmSendCommand, которая выполнена с продуманным нарушением стандартных соглашений о связях (она используется в самой реализации объекта, поэтому удобно было так сделать для некоторой оптимизации кода).

Кроме того, всегда можно напрямую использовать функции API mciSendCommand и mciSendString, передавая в качестве параметра, идентифицирующего устройство, соответственно, DeviceID или Alias устройства.

6.8.2. PlaySoundXXXX

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

PlaySoundMemory( mem, options ) – проигрывает звук из буфера в оперативной памяти;

PlaySoundResourceID( instance, resid, options ) – проигрывает звук из ресурса по идентификатору ресурса в указанном модуле;

PlaySoundresourceName( instance, resname, options ) – проигрывает звук из ресурса заданного именем ресурса;

PlaySoundEvent( event_name, options ) – проигрывает один из стандартных системных звуков (эти звуки ассоциируются с названиями в Панели управления, Звук, далее смотрите назначение звуков системным событиям и событиям установленных приложений);

PlaySoundFile( filaneme, options ) – проигрывает звук из указанного файла;

PlaySoundStop – останавливает воспроизведение всех звуков, запущенных на проигрывание всеми предыдущими функциями PlaySoundXXXX.

Все эти функции, в конечном итоге, обращаются к функции API PlaySound.

6.8.3. KOLMP3

Если вы желаете, чтобы ваше приложение было в состоянии воспроизводить звуковые файлы в формате MP3, и при этом не зависело от наличия на машине установленных кодеков, то этот пакет – то, что вы ищете. Кстати, в качестве примера приложения в архиве имеется миниатюрный MP3-проигрыватель, в сжатом виде всего 80,5Кбайт. Автор этого сокровища – Thaddy de Koning (Нидерланды). Все исходные коды предоставлены для изучения и использования.