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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    627,8 Кб
  • Опубликовано:
    2013-08-29
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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














Курсовая работа

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

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

Оглавление

Введение

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

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

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

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

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

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

Подробный разбор работы с приложением «Video2Bmp»

Заключение

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

Введение

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

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

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

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

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

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

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

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

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

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

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

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

Microsoft Visual Basic [1] - средство разработки программного обеспечения <#"656299.files/image001.gif">

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

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

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

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

= ScaleX(Picture1.Picture.Width, vbHimetric, vbPixels)= ScaleY(Picture1.Picture.Height, vbHimetric, vbPixels)= ScaleX(Picture3.Picture.Width, vbHimetric, vbPixels)= ScaleY(Picture3.Picture.Height, vbHimetric, vbPixels)

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

Picture2.Height = Visota + Visota2 - a - bShirina > Shirina2.Width = Shirina.Width = Shirina2= Shirina2 If

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

Picture2.PaintPicture Picture1, 0, 0, Shirina, Visota - b, 0, b,,, vbSrcCopy.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 = 1strhdr.dwRate > 30 Then strhdr.dwRate = 30

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

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

Получаем параметры сжатия от пользователя

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

pOpts = VarPtr(opts)= AVISaveOptions(Form1.hWnd, __CHOOSE_KEYFRAME Or ICMF_CHOOSE_DATARATE, _

, _, _)

If res <> 1 Then 'In C TRUE = 1AVISaveOptionsFree(1, pOpts)errorIf

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

{создаем сжатый поток}

= AVIMakeCompressedStream(psCompressed, ps, opts, 0&)res <> AVIERR_OK Then GoTo error

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

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

Set bmp = New cDib= Dir(RutaOpen & "*.bmp")

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

Do While Directorios <> ""bmp.CreateFromFile(RutaOpen & Directorios) <> True Then

MsgBox "No File!", vbExclamation + vbOKOnly, "KO!"errorIf= Dir Loop

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

With BI

.biBitCount = bmp.BitCount

.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.YPPM With

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

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

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

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

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

Posicion As Long

Posicion = 1= Dir(RutaOpen & "*.bmp")= Posicion + 1.CreateFromFile (RutaOpen & Directorios)= AVIStreamWrite(psCompressed, Posicion, 1, bmp.PointerToBits, bmp.SizeImage, AVIIF_KEYFRAME, ByVal 0&, ByVal 0&)

Directorios = DirWhile Directorios <> ""

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

Подробный разбор работы с приложением «Video2Bmp»

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


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


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

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

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

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

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

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

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

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

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


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

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


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

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

Заключение

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

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

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

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

. Win32 API и Visual Basic для профессионалов Dan Appleman Санкт-Петербург 2006

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

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

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

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

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

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

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!