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

Автор работы: Пользователь скрыл имя, 18 Января 2012 в 21:16, курсовая работа

Описание

В данном проекте была сделана программа для создания AVI презентаций , для разработки которой мне потребовалось умение работать с программой Delphi 7, знание языка Delphi а конкретнее работа с компонентом AviWriter в среде Delphi.

Работа состоит из  1 файл

рамка.doc

— 1.56 Мб (Скачать документ)

       Так как этот компонент не входит в  стандартную поставку компонентов 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.

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