Материалы для студентов→ Курсовая работа /

Программа создания мультимедийного полиэкрана

Скачать файл
Добавил: fafnir
Размер: 984.5 KB
Добавлен: 30.04.2015
Просмотров: 556
Закачек: 6
Формат: doc

Государственное образовательное учреждение

Высшего профессионального образования города Костромы

«Костромской государственный университет им. Н. А. Некрасова»

Физико-математический факультет

Кафедра прикладной математики и информационных технологий

Егорушин Сергей Александрович

КУРСОВАЯ РАБОТА

по дисциплине «Математическое и программное обеспечение компьютеров»

НА ТЕМУ

«Программа создания мультимедийного полиэкрана»

студента 4 курса специальности 010501.65 «Прикладная математика и информатика» специализации ДС.01.02.09 «Математическое и программное обеспечение компьютеров»

Научный руководитель:

к.ф. – м.н., доцент Сухов А. К.

__________________________

«___»_______________2013 г.

Кострома

2013 г.Оглавление

  • Классический Visual Basic (версии 5-6)
  • MmioStringToFOURCC - функция преобразует строку с завершающим нулем в четырех-значный код.
  • CoTaskMemFree - освобождает блок памяти задачи ранее выделенную через вызов CoTaskMemAlloc или CoTaskMemRealloc функции.
  • Члены структуры:

Введение.

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

Очень неудобно будет воспроизводить их через разные видеопроигрыватели или с помощью нескольких компьютеров. Наглядность пропадёт, и велика вероятность не уследить за происходящим на двух экранах.

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

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

Для достижения данной цели нужно решить следующие задачи:

1. Изучить язык программированияVisualBasic.

2. Подобрать нужные элементы управления и изучить их методы

3. Изучить функцииWindowsAPI необходимые для создания приложения

4. Разработать пользовательский интерфейс

5. Используя выбранные элементы управления, организовать режимы работы программы: Склеивание и Создание видео.

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

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

Microsoft Visual Basic [1] — средство разработки программного обеспечения, разрабатываемое корпорацией Microsoft и включающее язык программирования и среду разработки. Язык Visual Basic унаследовал дух, стиль и отчасти синтаксис своего предка — языка Бейсик, у которого есть немало диалектов.

В то же время Visual Basic сочетает в себе процедуры и элементы объектно-ориентированных икомпонентно-ориентированных языков программирования. Среда разработки VB включает инструменты для визуального конструирования пользовательского интерфейса.

Visual Basic считается хорошим средством быстрой разработки прототипов программы, для разработки приложений баз данных и вообще для компонентного способа создания программ, работающих под управлением операционных систем семейства Microsoft Windows.

Первое признание серьёзными разработчиками Visual Basic получил после выхода версии 3 — VB3. Окончательное признание как полноценного средства программирования для Windows — при выходе версии 5 — VB5. Версия VB6, входящая в состав Microsoft Visual Studio 6.0, стала по-настоящему зрелым и функционально богатым продуктом. После этого разработчики из Microsoft существенно изменили направление развития данной технологии.

Классический Visual Basic (версии 5-6)

Этот язык очень сильно привязан к своей среде разработки и к операционной системе Windows, являясь исключительно инструментом написания Windows-приложений. Привязка к среде заключается в том, что существует большое количество средств, предназначенных для помощи и удобства программирования: встроенный отладчик, просмотр переменных и структур данных на лету, окно отладки, всплывающая подсказка при наборе текста программы (IntelliSense). Все эти преимущества делают бесполезным и даже невозможным использование Visual Basic вне среды разработки, например в обычном текстовом редакторе.

ИменноVisualBasic 6-ой версии [2], я и буду использовать для создания нужного приложения. Назовем это приложение: «Video2Bmp».

Элементы управления, используемые в проекте:

CommandButton (Кнопка) - этот элемент управления используется для того, чтобы начать, прервать или закончить какой либо процесс. Кнопка встречается во всех приложениях Windows. Главным событием для кнопки является Click. Кроме этого события, у кнопки могут быть и другие, но они применяются редко.

Label (Надпись) -  предназначена для отображения текста, который пользователь не может изменить с клавиатуры. Хотя некоторые события этого элемента управления можно обрабатывать, обычно эта возможность не используется. Самым важным свойством надписи является Caption, содержащее отображаемый текст.

TextBox (Текстовое поле) - является основным элементом управления, предназначенным для ввода данных. Самым важным является свойство Text. Это свойство содержит отображаемый в поле текст. Элементы управления, которые разрешают ввод символов, имеют свойство Text, а элементы, предназначенные только для отображения текста, - свойство Caption. Текстовое поле подобно маленькому редактору.

ListBox (Список) - позволяет пользователю выбирать из списка один или несколько элементов. В любое время в список можно добавлять новые элементы или удалять существующие. Если не все элементы могут одновременно отобразиться в поле списка, то в нем автоматически отображаются полосы прокрутки. Основное событие списка - Click. Это событие вызывается, если пользователь с помощью мыши или клавиш управления курсором выбирает элемент в списке. Окно списка - это элемент управления, для которых важную роль играют методы. Методы списка необходимы для обработки элементов списка - добавления или удаления. Для добавления новых элементов используется метод Addltem. Для удаления элемента из списка используется метод RemoveItem, которому в качестве параметра передается индекс удаляемого элемента .Индексация элементов списка начинается с -1. Для удаления всех элементов списка используется метод Clear:

Timer (Таймер) - использование таймера является хорошим способом управления программой. С помощью таймера можно запускать или завершать процессы приложения в определенные моменты времени. Таймер может быть полезным и в том случае, если приложение выполняется в фоновом режиме. Во время проектирования таймер отображается в форме ,но во время выполнения программы он является невидимым. Таймер имеет единственное событие - Timer, которое вызывается по истечении установленного временного интервала. Для установки интервала времени служит свойство Interval, значение которого устанавливается в миллисекундах. Например, задание значения 250 вызывает событие Timer через каждые 250 миллисекунд независимо от того, какое приложение активно. Для отключения таймера следует присвоить свойству Interval значение 0 или свойству Enabled значение False.

DriveListBox (Список устройств) - относится к группе элементов управления, предназначенных для отображения и работы с дисками, каталогами и файлами. DriveListBox служит для отображения списка всех доступных дисков и устройств системы и обеспечивает возможность их выбора.

Directory ListBox (Список каталогов) - или кратко DirListBox - это второй элемент управления, предназначенный для выбора файлов. Он отображает структуру выбранного диска и позволяет осуществлять выбор и смену каталога.

Frame (Рамка) - это один из элементов контейнеров. Его назначение - объединить в группу несколько элементов управления. Объекты, объединенные с помощью рамки, можно как единое целое перемещать, активизировать и деактивизировать, делать видимыми или невидимыми. Некоторые элементы сами нуждаются в контейнере - например, все переключатели в форме всегда объединяются в одну группу. Чтобы создать вторую группу опций, нужно требуемые переключатели объединить в элементе контейнере. Для объединения объектов в группу нужно сначала создать элемент контейнер, затем добавить в него нужные элементы управления

PictureBox (Окно с рисунком) - как следует из самого названия, элемент предназначен для отображения рисунков и других графических объектов. Этот элемент управления также является элементом контейнером, поэтому его можно использовать для объединения других элементов. Как и события рамки, события элемента PictureBox обычно не обрабатываются, хотя при необходимости это можно сделать. Свойство AutoSize определяет, будут ли автоматически изменяться размеры элемента управления для отображения рисунков различного размера. Самое важное свойство PictureBox - Picture, которое содержит отображаемый графический объект. Это может быть растровое изображение (*.ВМР), пиктограмма (*.IСО), метафайл (*.WMF) или расширенный метафайл (*.EMF), также GIF и JPEG файлы.

Image (Изображение) - создан для отображения рисунков. Но в отличие от PictureBox, он не является элементом контейнером. Он не позволяет рисовать и не допускает группирования объектов. Однако Image использует меньше ресурсов и перерисовывает быстрее, чем PictureBox. Поэтому для отображения рисунков Image может быть лучшим вариантом. Так как главное назначение Image — отображение рисунков, его события обычно не анализируются. Главным свойством Image также является Picture. С его помощью можно определить рисунок, отображаемый элементом управления, на стадии проектирования либо при выполнении программы. Свойство Stretch определяет, как отображается рисунок. Если значение свойства Stretch равно True, то размеры рисунка изменяются до размеров элемента управления Image, в противном случае элемент управления изменяется до размера рисунка.

Common Dialog (Стандартное диалоговое окно) - включает набор диалоговых окон, реализующих стандартные и часто используемые функции Windows (открыть, сохранить как и др.).Для вызова окна диалога Save необходимо применить метод ShowSave.

Функции Windows API, используемые в проекте.

Интерфейс программирования приложений (иногда интерфейс прикладного программирования) (англ. application programming interface, API ) - набор готовыхклассов, процедур, функций, структур и констант, предоставляемых приложением (библиотекой, сервисом) для использования во внешних программных продуктах. Используется программистами для написания всевозможных приложений.

API – функции [3], которые возвращают определенные значения. И все приложения Windows их постоянно используют для выполнения типовых задач. Физически они находятся в особых исполняемых файлах с расширением .dll, которые называются библиотеками динамической связи. По большому счету мы можем использовать эти функции также, как и встроенные функции VB. Вообще-то не все API могут быть вызваны из VB, так как их параметры несовместимы с Visual Basic. Все API написаны на языке C - чуждого по синтаксису и структуре языку VB.

Использование API начинается с их объявления. Неправильные объявления являются причиной большинства ошибок. Объявлять их предпочтительнее в стандартном модуле с ключевым словом Public, хотя, если проект простой, можно объявить их и в форме.

Синтаксис объявления функцийAPIPublic/Private Declare Function Имя_функции Lib Библиотека Alias Псевдоним (Список_аргументов) As Тип

Тип -типзначения,котороевозвращаетнашафункция,аименно Byte, Long, Boolean, Integer, Single, Double, Currency, Date, String, Object, Variant.В объявлении определять тип возвращаемого значения можно и с помощью значка определителя типа (например типу Integer соответствует значок %), тогда секция Тип не нужна. Подробнее типы данных ты можешь посмотреть на странице "Типы данных, поддерживаемые VB".

Опишем некоторые, самые основныеAPI функции, используемые в проекте «Video2Bmp».

AVIFileInit - функция инициализирует AVIFile библиотеки(библиотеки обеспечивающие работу сAvi файлами).

AVIFileExit - функция закрывает AVIFile библиотеку и уменьшает счетчик ссылок для этой библиотеки.

Функция AVIFileOpen  - открывает файл AVI и возвращает адрес файла, используемый для доступа к нему. AVIFileCreateStream - функция создает новый поток, в существующий файл и создает интерфейс для нового потока.

AVISaveOptions - функция получает параметры сохранения для файла и возвращает их в буфер.

AVISaveOptionsFree - функция освобождает ресурсы, выделенные дляAVISaveOptions функции.

AVIMakeCompressedStream - функция создает сжатый поток от несжатого потока и фильтр сжатия, и возвращает адрес указателя с потоком сжатого. Эта функция поддерживает аудио и видео сжатия.

AVIStreamSetFormat - функция устанавливает формат потока в указанной позиции.

AVIStreamWrite - функция позволяет записывать данные в поток.

SetRect - устанавливает позицию и размер прямоугольника. Две координаты указывают на левые верхние и нижние правые углы прямоугольника. Функция возвращает 0 в случае ошибки или 1в успешном случае.

MmioStringToFOURCC - функция преобразует строку с завершающим нулем в четырех-значный код.

CoTaskMemFree - освобождает блок памяти задачи ранее выделенную через вызов CoTaskMemAlloc или CoTaskMemRealloc функции.

Lstrcat - Добавляет одну строку в другую.

SHBrowseForFolder - Отображает диалоговое окно, которое позволяет пользователю выбрать папку Shell.

SHGetPathFromIDList - Преобразует элемент списка (идентификатор пути) в файловой системе.

SHGetSpecialFolderLocation – Получает указатель на ITEMIDLIST структуры в специальную папку.

Структуры, используемые в приложении «Video2Bmp».

Структура BITMAPINFOHEADER -содержит информацию о размерах и цветовом формате аппаратно-независимого растрового формата (DIB).

Члены структуры:

biSize - определяет число байтов необходимое для структуры.

biWidth - определяет ширину точечного рисунка, в пикселях.

biHeight - устанавливает высоту точечного рисунка, в пикселях.

biPlanes - устанавливает число плоскостей целевого устройства. Это значение должно быть установлено в 1.

biBitCount - устанавливает число битов на пиксель.

biCompression - определяет тип сжатия для сжатого идущего снизу вверх точечного рисунка (идущий сверху вниз аппаратно-независимый растровый формат (DIB) не может сжиматься). Этот член структуры может быть одним из нижеперечисленных значений. 

biSizeImage - устанавливает размер изображения, в байтах. Он может быть установлен в нуль для BI_RGB точечных рисунков.

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

biYPelsPerMeter - устанавливает разрешающую способность по вертикали для принимающего устройства  точечного рисунка, в пикселях на метр.

biClrUsed - устанавливает число  индексов цвета в таблице цветов, которые фактически используются точечным рисунком. Если это значение равняется нулю, точечный рисунок использует максимальное число цветов, соответствующих значению члена структуры biBitCount для  метода сжатия, заданного членом biCompression.

biClrImportant - устанавливает число индексов цвета, которые требуются чтобы показать на экране точечный рисунок. Если это значение равняется нулю, требуются все цвета .

BITMAPFILEHEADER - эта структура содержит информацию о типе, размер и расположение файла, содержащего аппаратно-независимый растр (DIB).

RGBQUAD -структура описывает цвета, состоящий из относительной интенсивности красного, зеленого и синего цветов.

BITMAP -инкапсулирует точечный рисунок GDI+, состоящий из данных пикселей графического изображения и атрибутов рисунка. Объект Bitmap используется для работы с изображениями, определяемыми данными пикселей.

BrowseInfo - Содержит параметры для SHBrowseForFolder функции и получает информацию о папке, выбранной пользователем.

Составные части приложения «Video2Bmp».

Приложение «Video2Bmp» состоит из трех форм. Первая форма позволяет пользователю выбрать один из двух режимов:

  1. Склейка кадров – режим для объединения двух кадров в один
  2. Запись видео – режим для созданияavi файлов из набора кадровbmp.

Во второй форме реализуется режим склейки кадров. На третьей форме реализуется режим создания видео файла из набора кадров.

Опишем структуру программы ввиде блок-схемы:

Рассмотрим самые важные функции программы: для склейки кадров, в режиме «Склейка» программа использует триPictureBox. В первый и второй загружаются картинки из соответствующих папок. Затем они перерисовываются в третийPictureBox с соответствующими размерами и соединенными вместе и  сохраняются в  указанной папке в форматеbmp.

{Картинки из папок загружаются в соответствующиеPictureBox}

Picture1.Picture = LoadPicture(Ima1 + List1.List(i))

Picture3.Picture = LoadPicture(Ima2 + List2.List(i))

{Определяютсяразмерыкартинок}

Shirina = ScaleX(Picture1.Picture.Width, vbHimetric, vbPixels)

Visota = ScaleY(Picture1.Picture.Height, vbHimetric, vbPixels)

Shirina2 = ScaleX(Picture3.Picture.Width, vbHimetric, vbPixels)

Visota2 = ScaleY(Picture3.Picture.Height, vbHimetric, vbPixels)

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

Picture2.Height = Visota + Visota2 - a - b

If Shirina > Shirina2

Then

Picture2.Width = Shirina

Else

Picture2.Width = Shirina2

Shirina = Shirina2

End If

{Файлы из первого и второгоPictureBox перерисовываются в третий с соответствующими размерами}

Picture2.PaintPicture Picture1, 0, 0, Shirina, Visota - b, 0, b, , , vbSrcCopy

Picture2.PaintPicture Picture3, 0, Visota - b, Shirina, Visota2 - a, 0, a, , , vbSrcCopy

{Сохраняем полученную картинку с новым именем в форматеbmp}

SavePicture Picture2.Image, sFileName + s

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

{Заполняем заголовок для видео потока}With strhdr    .fccType = mmioStringToFOURCC("vids", 0&)          {тип видео потока}    .fccHandler = 0&                                                    {ссылка по умолчанию}    .dwScale = 1    .dwRate = k                                                                     {кадров в секунду}    .dwSuggestedBufferSize = bmp.SizeImage             {размер одного кадра в пикселах}    Call SetRect(.rcFrame, 0, 0, bmp.Width, bmp.Height)        {прямоугольник для потока}End With

{проверяем ввод пользователя}If strhdr.dwRate < 1 Then strhdr.dwRate = 1If strhdr.dwRate > 30 Then strhdr.dwRate = 30

{и создаем поток}res = AVIFileCreateStream(pfile, ps, strhdr)If (res <> AVIERR_OK) Then GoTo error

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

Получаем параметры сжатия от пользователяВнимание! Эти вызовы API требуют указателя на указатель на структуру

pOpts = VarPtr(opts)res = AVISaveOptions(Form1.hWnd, _                            ICMF_CHOOSE_KEYFRAME Or ICMF_CHOOSE_DATARATE, _                            1, _                            ps, _                            pOpts)If res <> 1 Then 'In C TRUE = 1    Call AVISaveOptionsFree(1, pOpts)    GoTo errorEnd If

Затем мы передаем эту информацию вместе с самим потоком в функцию AVIMakeCompressedStream:

{создаем сжатый поток}res = AVIMakeCompressedStream(psCompressed, ps, opts, 0&)If res <> AVIERR_OK Then GoTo error

Когда эта функция завершается успешно, переменная psCompressed указывает на интерфейс сжатого потока, который может записывать сжатый видео поток в формате, заданном структурами AVI_STREAM_INFO и AVI_COMPRESS_OPTIONS. Все, что мы должны сделать далее - установить параметры DIB, которые должны быть переданы в поток. Это требует использования структуры BITMAPINFO, что означает переменную изменяющегося размера, которую достаточно трудно использовать в VB. К счастью, здесь нам поможет класс cDIB. В этом классе имеется функция, принимающая файл с диска. Ранее я вызывал эту функцию для считывания первого кадра потока из файла для того, чтобы получить размер буфера для структуры AVI_STREAM_INFO:

{получаем первый кадр потока из файла}

Set bmp = New cDib

Directorios = Dir(RutaOpen & "*.bmp")

MsgBox "Нужно выбрать параметр сжатия", , "Предупреждение"

Do While Directorios <> ""

If bmp.CreateFromFile(RutaOpen & Directorios) <> True Then

MsgBox "No File!", vbExclamation + vbOKOnly, "KO!"

GoTo error

End If

Directorios = Dir Loop

Сейчас мы можем использовать ту же структуру для установки формата видео-потока. Прежде всего нам необходимо записать всю необходимую информацию в структуру BITMAPINFO:

With BI           .biBitCount = bmp.BitCount           .biClrImportant = bmp.ClrImportant           .biClrUsed = bmp.ClrUsed  .biCompression = bmp.Compression    .biHeight = bmp.Height    .biWidth = bmp.Width    .biPlanes = bmp.Planes    .biSize = bmp.SizeInfoHeader    .biSizeImage = bmp.SizeImage    .biXPelsPerMeter = bmp.XPPM    .biYPelsPerMeter = bmp.YPPMEnd With

И затем передаем эту структуру вместе с потоком в функцию AVIStreamSetFormat:

{устанавливаем формат сжатого потока}

res = AVIStreamSetFormat(psCompressed, 0, ByVal bmp.PointerToBitmapInfo, bmp.SizeBitmapInfo)If (res <> AVIERR_OK) Then GoTo error

Если эта функция завершается успешно, то сжатый поток полностью инициализирован и готов принять несколько DIB для записи. Вы сделаете это путем передачи этого потока и позиции, с которой нужно начать запись, в функцию AVIStreamWrite. Обратите внимание, что здесь вновь используется класс cDIB, так как он содержит метод, который возвращает прямой указатель на биты, которые нужно передать в функцию:

{Записываем каждый кадр видео}

Static Posicion As Long

Posicion = 1

Directorios = Dir(RutaOpen & "*.bmp")

Do

Posicion = Posicion + 1

bmp.CreateFromFile (RutaOpen & Directorios)

res = AVIStreamWrite(psCompressed, Posicion, 1, bmp.PointerToBits, bmp.SizeImage, AVIIF_KEYFRAME, ByVal 0&, ByVal 0&)

Directorios = Dir

Loop While Directorios <> ""

Как только этот цикл завершит запись изображений, Вам нужно освободить все ресурсы и файловые указатели. Файл, созданный Вами в начале этой процедуры, теперь содержит обычный видео поток, и его можно воспроизвести в Windows Media Player или в другом проигрывателе.              Подробный разбор работы с приложением «Video2Bmp».

При запуске программы открывается форма с двумя кнопками «Склейка кадров» и  «Создание видео». В этом окне выбирается режим работы программы.

При нажатии на кнопку  «Склейка кадров» выбирается режим, позволяющий пользователю объединить два набора кадров в один. На форме располагаются два элементаImage, в которых будет отображаться процесс объединения кадров, по два элементаDriveListBox, Directory ListBox иListBox – которые используются для выбора папок с кадрами.

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

НижниеDriveListBox,DirectoryListBox используются для выбора папки с кадрами, которые будут отображаться в нижней части полиэкрана. НижнийListBox используется для отображения названий всех кадров из соответствующей папки.

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

Высота же полиэкрана по умолчанию устанавливается, как сумма высот кадров из первой и второй папки. Если пользователю нужно изменить высоту кадров, то он может это сделать, нажав на кнопку «Установить высоту».

После выбора нужных папок, нажимаем на кнопку «Загрузить» и в элементахListBox отобразятся имена всех файлов из соответствующих папок. Имена в элементахListBox отсортируются по названию. Если щелкнуть на любой элемент списка, то соответствующая картинка отобразится в элементеImage.

Также рекомендуется, чтобы количество кадров в списках совпадало, иначе оставшиеся кадры не будут использоваться, т.е. в результате объединения количество кадров будет равно меньшему количеству из списковListBox. Кнопки «Очистить список 1» и «Очистить список 2» используются для очистки соответствующих элементовListBox.

Если же в списках имеются лишние кадры, то с помощью кнопок «Удалить из списка» можно удалить выделенный элемент в соответствующем спискеListBox.

При нажатии на кнопку «Склеить» открывается диалоговое окно для выбора папки, в которую будет сохраняться результат.

После выбора папки начнётся процесс объединения. Файлы из первого списка будут соединятся с соответствующими по номеру файлами из второго списка и результат будет сохраняться в выбранной папке.

При завершении процесса объединения выскочит диалоговое окно, сообщающее пользователю о завершении объединения.  После чего мы можем снова вернуться в меню выбора режима, нажав на кнопку «Вернуться в главное меню».

Кнопка «Создание видео» открывается форма, реализующая режим созданияavi файла из кадров. С помощью кнопки «Выбрать папку с кадрами и файл сохранения» вызываются два диалоговых окна подряд. Первое для выбора папки с кадрами из которых будет собиратьсяavi файл. Второе для выбора имени файла в котором будет сохранен результат.

После этого жмем на кнопку «Записать видео» и запускаем процесс преобразования файловbmp  в видео файл. Перед запуском этого процесса пользователю предоставляется окно выбора режима сжатия, который позволит пользователю выбрать  способ сжатия. Список будет зависеть от того, какие кодеки имеются на компьютере пользователя. Выбрав способ сжатия, пользователь запускает процесс преобразования. Результат будет сохранен в указанном файле.

После записи пользователь может вернуться в главное меню с помощью кнопки «В главное меню».

Результирующие файлы.

Теперь поговорим о результате работы программы «Video2Bmp».

Результатом будет видео-файл в форматеavi, объединяющий в себе два набора кадров. Заметим, что размер файла будет достаточно велик, т.к. для создания используются файлыbmp, имеющие большой вес (Напомним, что в самой программе имеется выбор способа сжатия видео, но он позволяет уменьшить вес файла результата примерно в 3 раза).

Поэтому с помощью дополнительных программ рекомендуется произвести сжатие этого файла. Возможный вариант – программаTotalVideoConverter илиMxCoder, позволяющая сжать это видео еще в 5 или 6 раз. После всех вышеописанных преобразований можно использовать видео-файл для просмотра в любом видео-проигрывателе.

Заключение.

Приложение «Video2Bmp» позволяет создать видео-файл отображающий одновременно два ряда видеокадров в одном окне, синхронизованных между собой. Имеется возможность кадрирования исходных изображений, предварительного просмотра, создаваемого видеоряда, удаления отдельных кадров, выбора исходных папок с видеорядами и папки назначения. Т. е. это приложение полностью соответствует цели поставленной в этой работе. Данное приложение можно эффективно применять для иллюстрации взаимного хода двух взаимодействующих процессов, что позволит более детально их исследовать и оценить взаимное влияние.

Используемые источники.

1. ИспользованиеVisualBasic 6.0 Брайан Сайлер, Джефф Споттс Издательский Дом «Вильямс» 1999

2.VisualBasic 6.0: разработка приложений (практическое руководство) Гарнаева А.BHV-СПб 2001

3.Win32API иVisualBasic для профессионаловDanAppleman Санкт-Петербург 2001

4.http://ru.wikipedia.org/wiki/Visual_Basic

5.http://manuals-ot-slona.narod.ru/visualb_faq_rus/faqindex.html

6.http://www.ref.by/refs/34/7717/1.html

7. http://ru.wikipedia.org/wiki

8. http://hpc.name/thread/2154/p1.html

9. http://msdn.microsoft.com/en-us/library/windows/desktop/dd756817

10. http://www.answers.com/topic