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

ЛИЧНЫЙ КАБИНЕТ 

 

Здравствуйте гость!

 

Логин:

Пароль:

 

Запомнить

 

 

Забыли пароль? Регистрация

Повышение уникальности

Предлагаем нашим посетителям воспользоваться бесплатным программным обеспечением «StudentHelp», которое позволит вам всего за несколько минут, выполнить повышение уникальности любого файла в формате MS Word. После такого повышения уникальности, ваша работа легко пройдете проверку в системах антиплагиат вуз, antiplagiat.ru, etxt.ru или advego.ru. Программа «StudentHelp» работает по уникальной технологии и при повышении уникальности не вставляет в текст скрытых символов, и даже если препод скопирует текст в блокнот – не увидит ни каких отличий от текста в Word файле.

Результат поиска


Наименование:


курсовая работа Написание программы для создания видео презентаций

Информация:

Тип работы: курсовая работа. Добавлен: 11.11.2012. Сдан: 2012. Страниц: 8. Уникальность по antiplagiat.ru: < 30%

Описание (план):


 

        Введение
       …Еще  лет пятнадцать назад работа с  видео казалась невозможной экзотикой – теперь же едва ли не каждый второй покупатель компьютера не приминет уточнить: «… и чтобы с видео можно было работать!».
       Пришествию  видео способствовали сразу несколько  факторов. Во – первых, рост емкости жестких дисков и скорости процессоров. Не будем забывать, что даже с использование стандартных алгоритмов компрессии часовой фильм может занять на диске несколько гигабайт. А наложение внесенных при редактировании фильма изменений и спецэффектов(рендеринг) может занимать в несколько раз больше времени, чем фактическая продолжительность вашего «ролика» (и время это напрямую зависит от процессора).
       Второй  фактор – бум цифрового видео. В «аналоговую» эпоху видео можно  было ввести в компьютер только с помощью специальных плат – «оцифровщиков», которые стоили несколько сотен долларов. И следовательно, были не слишком доступны трудящимся массам. Сегодня дело другое: теперь видео поток вводиться в компьютер уже в цифровом виде, а для подключения цифровой видеокамеры к компьютеру нужен лишь недорогой контроллер FireWire. Переход на цифровую технику не только обеспечивает лучшее качество изображения, но и дарит пользователям множество новых возможностей.
       Наконец, третья причина революции «цифрового видео» - безусловно, появление новых алгоритмов сжатия(компрессии) видеопотока.
       Приступая к выполнению дипломного проекта, я поставил перед собой цели:
    Написать программу для создания презентаций в формате .avi;
    Добавить в программу возможность редактирования кадров;
    Сделать программу наиболее простой в понимании для обычных пользователей;
    Обеспечить возможность доступа к программе широкому кругу пользователей;
    А так же более глубоко изучить работу с видео данными в среде разработки программного обеспечения Delphi 7.
 

1. Теоретическая часть
1.1 Сущность изучаемой  проблемы
       Презентация – это форма представления  информации как с помощью разнообразных  технических средств, так и без  них. Как правило, представляются новые проекты, товары, услуги, идеи и т.п. В целом задача презентации – сделать так, чтобы ее объект заинтересовал аудиторию.
       Для воспроизведения видео в программах написанных на Delphi существует специальный компонент мультимедийный проигрыватель (TMediaPlayer), он входит в стандартную поставку Delphi. Данный компонент включает в себя ряд возможностей Универсального проигрывателя Windows и предназначен для воспроизведения в рамках программы музыкальных и видеоклипов в различных форматах, поддерживаемых драйвером MCI (Media Control Interface). Управление воспроизведением осуществляется при помощи набора кнопок, напоминающих кнопки музыкальных центров.

        Рис 1. Компонент TMediaPlayer 

       Для работы с видео требуется технология DirectShow. В концепции DirectShow мультимедийные данные – это поток, который проходит через несколько обрабатывающих блоков. Блоки, обрабатывающие поток данных, передают данные по цепочке друг другу, таким образом можно представить себе несколько «устройств», каждое из которых выполняет какую-то обработку данных и передает их соседнему «устройству». Эти «устройства» или «блоки обработки» данных называют фильтрами. Цепочка, по которой передаются данные, содержит несколько фильтров, связанных определенным образом.
       В DirectShow имеются готовые фильтры, из которых, словно из детских кубиков, программист может выстроить ту или иную цепочку обработки данных, кроме того, конечно, можно создавать свои, нестандартные фильтры.
       Для создания такой «цепочки обработки» (которая, кстати, официально называется Filter Graph – «граф фильтров» или, в несколько вольном переводе – «схема соединения фильтров»), так вот для создания схемы соединения фильтров, предназначен самый базовый и лежащий в основе всех основ компонент DirectShow, под названием Filter Graph Manager – Менеджер Графа Фильтров. 

1.2 Обоснование выбора  программных средств  для выполнения  проекта
       Для создания своей программы создания AVI презентаций я использовал среду визуального программирования Delphi 7. Так как она наиболее проста в использовании. Во-первых, в Delphi 7 сразу после запуска создается готовая пустая форма. Во-вторых, для добавления нового объекта не нужно его описывать так как Delphi уже имеет ряд готовых объектов для добавления которых нужно просто перенести их с панели компонентов на любое свободное место формы. В третьих в Delphi встроен высокопроизводительный компилятор в машинный код, который обеспечивает производительность необходимую для построения приложений в архитектуре «клиент-сервер». И в четвертых с помощью Delphi очень легко разработать пользовательский интерфейс.
       Вид экрана после запуска Delphi несколько необычен. Вместо одного окна на экране появляются пять (такой вид интерфейса называется SDI):
    Главное окно – Delphi 7;
    Окно стартовой формы – Form1;
    Окно редактора свойств объектов – Object Inspector;
    Окно просмотра списка объектов – Object Tree View;
    Окно редактора кода – Unit1.pas.

       Рис 2. Вид окна Delphi 7
       Окно  редактора кода почти полностью  закрыто окном стартовой формы.
       В главном окне находится меню команд, панели инструментов и палитра компонентов.
       Окно  стартовой формы (Form1) представляет собой заготовку главного окна разрабатываемого приложения.
       Окно  Object Inspector – окно редактора свойств объектов предназначено для редактирования значений свойств объектов. 
В окне редактора кода, которое моно увидеть, отодвинув в сторону окно формы, следует набирать текст программы. В начале работы над новым проектом это окно редактора кода содержит сформированный Delphi шаблон программы.

       Для работы с видео требуется технология DirectShow, а чтобы работать с ней необходимо иметь некоторые представление о технологии COM (Component Object Model) – хотя быть знатоком этой технологии вовсе не обязательно – просто достаточно знать, что для получения COM-интерфейса нужно вызвать QueryInterface; скачать заголовочные файлы DirectShow API, переведенные на Delphi в рамках проекта JEDI и либо поместить их в каталог Delphi\Lib либо добавить путь к каталогу, в котором они находятся в установках Delphi Library Path.
       Существует много способов работы с видео. Предназначенные для этого компоненты Delphi не очень помогут в решении задачи воспроизведения подобных файлов на поверхностях, поэтому нам придется воспользоваться нестандартными методами.
       Прежде  всего мы познакомимся с модулем vfw.pas, не входящим в набор стандартных модулей Delphi, но работающим со стандартной системной библиотекой avifil32.dll.
       Вместе  с Delphi поставляется набор справочных файлов системного программиста, корпорации Microsoft. С их помощью вы сможете  разобраться во всех тонкостях использования этого модуля.
       Поскольку модуль vfw.pas годится не для каждого видео, иногда используется еще один способ воспроизведения видео, основанный на использовании модуля DirectShow. Эта библиотека также входит в состав DirectX, включает набор функций для работы с мультимедиа.
       При воспроизведении файла с помощью  модуля VFW картинка получается искаженной, поэтому и приходится прибегать к иному способу. Отказаться от первого способа полностью не является возможным, поскольку DirectShow тоже годится не для любого файла. Другая причина, по которой мы не можем усердствовать в изучении упомянутого модуля, состоит в том, что он может применяться лишь с интерфейсами ранних версий.
       Так же для записи видео файлов не редко  используется готовый модуль AviMaker. Он содержит описание класса TAviMaker, выполняющего за нас всю изнурительную работу. Программисту остается только подготовить набор растров, составляющих последовательность кадров создаваемого фильма, и вызвать метод записи.
       В данной курсовой я буду использовать не менее легкий в понимании компонент AviWriter, разработанный Elliott Shevin. AviWriter - компонент, для создания элементарных видео файлов формата AVI.  AviWriter построит файл формата AVI, содержащий один поток любого числа элементов TBitmaps, плюс единственный WAV файл.
       Познакомившись  с различными способами воспроизведения  видеоданных, мы научимся создавать AVI-файлы.
 

        2. Практическая часть
       2.1 Описание интерфейса пользователя 

        После запуска программы появляется главное окно программы. Оно поделено на три части. В верхней части окна программы расположено главное меню программы. На левой стороне окна находится список кадров будущей презентации и настройки сохраняемого файла. Справа от списка кадров будущей презентации находятся кнопки управления порядком следования кадров в презентации и кнопка удаления ненужного файла. Посередине окна программы расположена панель вывода выбранного кадра, ниже этой панели находятся кнопки переключения кадров, кнопка предварительного просмотра, кнопка вызова редактора кадра и полоса прокрутки  кадров. На правой стороне окна отображается информация по выбранному кадру. 
        Для того чтобы добавить в презентацию  видео файл необходимо нажать на кнопку «Добавить AVI» расположенную чуть ниже списка кадров будущей презентации или пройти по ссылке Файл – Добавить AVI, после этого в появившемся диалоговом окне выбрать нужный видео файл и нажать на кнопку «Открыть». Программа начнет раскадровку видео файла, время раскадровки напрямую зависит от количество кадров в видео файле, поэтому если видео очень большой длинны это может занять очень много времени.
Рис 4. Диалоговое оно добавления видео файла

Рис 5. Диалоговое окно добавления изображения
       Для того чтобы добавить в проект изображения необходимо нажать на кнопку «Добавить картинку» расположенную чуть ниже списка кадров будущей презентации или пройти по ссылке Файл – Добавить картинку.
       В программе создания AVI презентаций также предусмотрено добавление в презентацию звуковых эффектов. Для этого необходимо подготовить файл формата WAV, выбрать звуковой файл для привязки к презентации можно нажав на кнопку «Добавить WAV» или пройдя по ссылке Файл – Добавить WAV. Следует также помнить, что нельзя добавить отдельный звук для каждого кадра, звуковая дорожка привязывается по длине готовой презентации. Если звуковой файл длиннее готовой презентации то остаток звукового файла просто отбрасывается, поэтому это необходимо учитывать при подготовке звукового файла для презентации.
Рис 6. Диалоговое окно добавления звуковой дорожки
       Так же в программе реализованы возможности  редактирования графических изображений. Для того чтобы вызвать окно редактора изображений необходимо нажать на кнопку «Редактировать» расположенную ниже панели вывода выбранного файла, или пройти по ссылке Правка – Редактировать. После этого на экране появится окно редактирования изображений. Визуально его можно поделить на две части слева панель вывода редактируемого изображения, а справа инструменты рисования и кнопка «сохранить». По правой и нижней части панели вывода редактируемого изображения расположены вертикальная и горизонтальная полосы прокрутки соответственно.

Рис 7. Окно редактора изображении
       2.2. Разработка алгоритма решения задачи
       Создание  AVI файла происходит при помощи нестандартного для Delphi  компонента AVI WRITER, разработанный Elliott Shevin взявшего большую часть кода у Anders Melander.
       AviWriter - компонент, для создания элементарных видео файлов формата AVI.
       AviWriter построит файл формата AVI, содержащий  один поток любого числа элементов TBitmaps, плюс единственный WAV файл.
       Свойства  компонента AviWriter:
    Растровые изображения: TList указателей на объекты TBitmap, которые становятся кадрами видео потока формата AVI. Компонент распределяет и освобождает TList. Порядком следования объектов TBitmap можно при помощи TList. Для создания видео файла требуется как минимум одно растровое изображение.
    Высота, Ширина: Размерности видео формата AVI, измеряется в пикселях.
    FrameTime: Продолжительность каждого видео кадра, в миллисекундах.
    Растяжение: Если значение true, каждый TBitmap в списке Bitmaps будет подогнан по размерам, определенным в Высоте и Ширине. Если false, для каждого TBitmap будет скопирован его верхний левый угол без растяжения.
    Имя файла: название файла формата AVI.
    WAVFileName: Название файла WAV, который станет аудио потоком для файла формата AVI. Это дополнительное свойство, звуковой поток добавляется по желанию.
       Так как этот компонент не входит в  стандартную поставку компонентов Delphi для работы с ним его необходимо установить и добавить в палитру компонентов.
       Палитра компонентов – это файл с расширением  dpk (Delphi Package File).
       Для установки компонента AviWriter необходимо в Delphi  из меню Component выбрать команду Install Component и заполнить поля открывшегося окна Install Component.
       
    Рис 8. Окно Install Component
       В поле Unit file name нужно ввести имя модуля. Для этого удобно воспользоваться кнопкой Browse.
       Поле  Search path (путь поиска) должно содержать разделенные точкой с запятой имена каталогов, в которых Delphi во время установки компонента будет искать необходимые файлы, в частности файл ресурсов компонента. Если имя файла модуля было введено в поле Unit file name выбором файла из списка, полученного при помощи кнопки  Browse, то Delphi автоматически добавляет в поле Search path имена необходимых каталогов.
       Примечание
       Файл  ресурса компонента должен находиться в одном из каталогов, перечисленных в поле Search path. Если его там нет, то компоненту будет назначен значок его родительского класса.
       Поле  Package file name должно содержать имя пакета, в который будет установлен компонент. По умолчанию компоненты, создаваемые программистом, добавляются в пакет Dclusr70.dpk.
       Пакет Package description содержит название пакета. Для пакета Dclusr70.dpk это текст: Borland User's Components.
       После заполнения перечисленных полей  и нажатия кнопки ОК начинается процесс установки. Сначала на экране появляется окно Confirm в котором Delphi  просит подтвердить обновление пакета.
       

        Рис 9. Окно Confirm
       После нажатия кнопки Yes  процесс установки продолжается. Если он завершается успешно, то на экране появляется информационное сообщение о том что в результате обновления пакета палитра компонентов обновлена, т.е. в нее добавлен значок компонента, и новый компонент зарегистрирован.

Рис 10. Окно оповещения о успешной установке пакета компонентов
       После установки компонента в пакет  открывается диалоговое окно Package (Редактор пакета компонентов) в котором перечислены компоненты, находящиеся в пакете.

        Рис 11. Окно редактора пакета компонентов
       На  этом процесс установки компонента заканчивается. В результате на вкладке палитры компонентов, имя которой было задано при создании имени модуля компонента, появляется значок установленного компонента.
2.3 Построение видео файла
       Для работы с компонентом нам понадобится  одна переменная целого типа. Одна типа TPicture и одна переменная растрового изображения. Объявим их в разделе объявления переменных для процедуры построения видео файла:
                       var
                       i: integer;
                       Pic: TPicture;
                       bm: TBitmap;
       После того как все необходимые нам  переменные объявлены необходимо указать характеристики будущего видео файла, такие как Высота, Ширина, Частота смены кадра и звуковой поток. Высоту, Ширину и Частоту смены кадров будем считывать из компонентов TSpinEdit размещенных на форме:
                       with form1.AviWriter_21 do
                       begin
                       Width :=form1.SpinEdit1.Value;
                       Height :=form1.SpinEdit2.Value;
                       FrameTime :=form1.SpinEdit3.Value;
                       if Label6.Caption = 'None' then
                       WavFileName := ''
                       else
                       WavFileName := Label6.Caption;
       Как видно из листинга, перед тем как  добавить звуковой поток происходит проверка, добавил ли пользователь звуковую дорожку в программу или оставил поле для записи пути к звуковому файлу пустым.
       Далее устанавливаем свойства Stretch – растяжение, которое отвечает за приведение изображения под Высоту и Ширину видео файла, и OnTheFlyCompression – быстрое сжатие, отвечающее за сжатие видео файла, присваиваем этим свойствам значение true:
                         Stretch :=true;
                         OnTheFlyCompression:=true;
       После того как все свойства указаны, необходимо провести инициализацию видео. Инициализация необходима для построения графа видео потока. Инициализация вызывается при помощи метода InitVideo:
                       form1.AviWriter_21.InitVideo;
       После инициализации видео в граф видео  потока поочередно добавляются «фреймы» - изображения, отдельные кадры видео файла. Для этого создадим цикл который и будет поочередно брать изображения из подготовленного заранее компонента размещенного на форме, в котором записаны адреса изображений, и добавлять их в граф видео потока. После того как все изображения будут добавлены необходимо освободить переменные чтобы они не занимали много места в оперативной памяти.
                       for i := 0 to form1.ListBox1.Items.Count - 1 do
                       begin
                       Pic := TPicture.Create;
                       try
                       Pic.loadfromfile(form1.ListBox1.Items.Strings[i]);
                       bm := TBitmap.Create;
                       try
                       bm.PixelFormat := form1.AviWriter_21.PixelFormat;
                       bm.Width := Pic.Width;
                       bm.Height := Pic.Height;
                       bm.Canvas.draw(0, 0, Pic.Graphic);
                       form1.AviWriter_21.AddFrame(bm);
                       finally
                       bm.Free;
                       end;
                       finally
                       Pic.Free;
                       end;
       Когда все изображения добавлены в граф видео потока, он подготавливается для создания файла и создается файл формата AVI. Это осуществляется двумя методами FinalizeVideo – подготовка к записи в файл, и WriteAvi – создание файла формата AVI и запись в него графа видео потока.
                       form1.AviWriter_21.FinalizeVideo;
                       form1.AviWriter_21.WriteAvi;
2.4 Редактирование изображения
       В программе создания AVI презентаций имеются примитивные инструменты для рисования, такие как линия, прямоугольник, круг и вывод текста. Чтобы активировать один из них необходимо щелкнуть на соответствующем инструменту кнопке. В процедуре обработки щелчка по кнопке логическая переменная отвечающая за активность соответствующего инструмента примет значение true а логические переменные других инструментов примут значение false. Например, чтобы активировать инструмент «линия» процедура нажатия кнопки выглядит так:
                  procedure TForm2.SpeedButton1Click(Sender: TObject);
                  begin
                  istext:=false;
                  ismove:=false;
                  ispen:=true;
                  isellipse:=false;
                  isrectangle:=false;
                  screen.Cursors[1]:=loadcursorfromfile('aero_pen.cur');
                  form2.Image1.Cursor:=1;
                  end;
       Где ispen – переменная типа Boolean отвечающая за активность инструмента «линия», а istext, isellipse, isrectangle – это логические переменные отвечающие за активность инструментов «текст», «круг» и «прямоугольник» соответственно.
       Сама  возможность  рисовать описана в  трех процедурах обработчиках событий  OnMouseDown, OnMouseMove и OnMouseUp компонента Image, в котором отображается редактируемое изображение.
       В обработчике события OnMouseDown переменной isdraggin которая отвечает за состояние нажатия левой кнопки мыши присваивается значение true, т.е. левая кнопка мыши нажата. Так же в этой процедуре сохраняется исходное изображение в компоненте Image, это делается для того чтобы в дальнейшем было возможным отменить сделанные изменения.  Исходное изображение сохраняется при помощи процедуры SaveToFile  в папке с программой:
  form2.Image1.Picture.Bitmap.SaveToFile(extractfilepath(paramstr(0)) + 'mod1');
  form2.Image1.Picture.SaveToFile(extractfilepath(paramstr(0)) + 'modpic');
       В обработчике события OnMouseMove проверяется значение переменной isdraggin и если ее значение истинно, то программа проверяет какой из инструментов в данный момент времени находиться в состоянии активности ispen, istext, isellipse, isrectangle или ismove и программа выполняет те операторы, которые находятся в блоке активного инструмента. Процедура обработчика события OnMouseMove  выглядит следующим образом:
      procedure TForm2.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
      var
      OldBkMode: integer;
      begin
      if isdraggin = true then
      begin
      if ispen = true then
      form2.Image1.Picture.Bitmap.Canvas.LineTo(x,y);
      if isellipse = true then
      begin
      form2.Image1.Picture.Bitmap.LoadFromFile(extractfilepath(paramstr(0)) + 'modpic');
      form2.Image1.Picture.Bitmap.Canvas.Ellipse(dx,dy,x,y);
      end;
      if isrectangle = true then
      begin
      form2.Image1.Picture.Bitmap.LoadFromFile(extractfilepath(paramstr(0)) + 'modpic');
      form2.Image1.Picture.Bitmap.Canvas.Rectangle(dx,dy,x,y);
      end;
      if ismove = true then
      begin
      form2.ScrollBox1.HorzScrollBar.Position:=x div 2;
      form2.ScrollBox1.VertScrollBar.Position:=y div 2;
      end;
      if istext=true then
      begin
      form2.Image1.Picture.Bitmap.Canvas.Font:=form2.FontDialog1.Font;
      form2.Image1.Picture.Bitmap.LoadFromFile(extractfilepath(paramstr(0)) + 'modpic');
      OldBkMode := SetBkMode(form2.Image1.Picture.Bitmap.Canvas.Handle, TRANSPARENT);
      form2.Image1.Picture.Bitmap.Canvas.TextOut(x,y,form2.Edit1.Text);
      SetBkMode(form2.Image1.Picture.Bitmap.Canvas.Handle, OldBkMode);
      end;
      end;
      end;
       В обработчике события OnMouseUp переменной isdraggin присваивается значение false, т.е. левая кнопка мыши не нажата.
      procedure TForm2.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
      begin
      isdraggin:=false;
      end;
       Рассмотрим  поближе каждый из инструментов для рисования «линия», «окружность», «прямоугольник» и «текст». У каждого из этих инструментов есть логическая переменная, отвечающая за его активность ispen, isellipse, isrectangle и istext.
       Начнем  с рассмотрения инструмента «линия»,  когда логическая переменная отвечающая за его активность принимает значение true, это происходит при нажатии на кнопку Линия, то при нажатии  на левую кнопку мыши над изображением и перемещением ее в другую область изображения срабатывает часть процедуры OnMouseMove:
      if ispen = true then
      form2.Image1.Picture.Bitmap.Canvas.LineTo(x,y);
       Здесь оператором IF определяется значение переменной ispen и если оно равно true то на изображении которое находиться в компоненте Image1 через его свойство Canvas при помощи процедуры LineTo рисуется линия, отмечая каждую новую точку по координатам курсора, которые записаны в переменных X и Y, если же значение переменной ispen равно false, то программа переходит к проверке активности следующего инструмента.
       Инструмент  «окружность» работает по схожему принципу, когда логическая переменная отвечающая за его активность принимает значение true, это происходит при нажатии на кнопку Окружность, то при нажатии на левую кнопку мыши над изображением и перемещением ее в другую область изображения срабатывает часть процедуры OnMouseMove:
      if isellipse = true then
      begin
      form2.Image1.Picture.Bitmap.LoadFromFile(extractfilepath(paramstr(0)) + 'modpic');
      form2.Image1.Picture.Bitmap.Canvas.Ellipse(dx,dy,x,y);
      end;
       Здесь также оператором IF определяется значение переменной isellipse. И если его значение равно true то на изображении которое находиться в компоненте Image1 через его свойство Canvas при помощи процедуры Ellipse рисуется окружность. Переменные dx и dy это координаты курсора мыши на момент нажатия кнопки мыши, они передают процедуре координаты верхнего левого края окружности, а x и y это текущие координаты курсора мыши, которые определяют правый нижний край  окружности. Строка:
и т.д.................


Перейти к полному тексту работы


Скачать работу с онлайн повышением уникальности до 90% по antiplagiat.ru, etxt.ru или advego.ru


Смотреть полный текст работы бесплатно


Смотреть похожие работы


* Примечание. Уникальность работы указана на дату публикации, текущее значение может отличаться от указанного.