Your SlideShare is downloading. ×
Лекция 5. C++ Builder: работа с графикой и мультимедиа
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Лекция 5. C++ Builder: работа с графикой и мультимедиа

7,646

Published on

Прикладная информатика

Прикладная информатика

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
7,646
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
35
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Добавление переменных b1 и b2: class TForm1 : public TForm { public: __fastcall TForm1(TComponent* Owner); Graphics::TBitmap *b1, *b2; }; Создание графических объектов: void __fastcall TForm1::FormCreate(TObject *Sender) { b1 = new Graphics::TBitmap(); b1->LoadFromFile("fon.bmp"); b2 = new Graphics::TBitmap(); b2->LoadFromFile("kolobok.bmp"); }
  • void __fastcall TForm1::FormPaint (TObject *Sender) { Canvas->Draw(10,10,b1); }
  • const rcLeft = 10; const rcTop = 10; Canvas->CopyMode = cmSrcCopy; Canvas->Draw (rcLeft,rcTop,b1);
  • const rcLeft = 10; const rcTop = 10; TRect rcdst, rcdst; Canvas->CopyMode = cmSrcCopy; Canvas->Draw (rcLeft,rcTop,b1); rcdst.Left = rcLeft; rcdst.Top = rcTop; rcdst.Right = rcLeft+50; rcdstBottom = rcTop+50; rcsrc.Left = 0; rcsrc.Top = 0; rcsrc.Right = 49; rcsrc.Bottom = 49; Переменная rcdst задает прямоугольную область для выводимого рисунка на форме. Переменная rcsrc определяет прямоугольник на исходном изображении колобка, хранящемся в объекте b2, который следует скопировать в позицию, заданную прямоугольником rcdst. Исходно выбран первый кадр, левая половина двухкадрового изображения шириной 100 точек.
  • 3.3. Graphics::TBitmap *b1, *b2; Graphics::TBitmap *MaskBitmap; 3.4. void __fastcall TForm1::FormCreate (TObject *Sender) { b1 = new Graphics::TBitmap(); b1->LoadFromFile("fon.bmp"); b2 = new Graphics::TBitmap(); b2->LoadFromFile("kolobok.bmp"); MaskBitmap = new Graphics::TBitmap(); MaskBitmap->Assign(b2); }
  • MaskBitmap = new Graphics::TBitmap(); MaskBitmap->Assign(b2); MaskBitmap->Mask(clBlack);
  • Canvas->CopyMode = cmSrcAnd;
  • Canvas->CopyRect(rcdst,MaskBitmap->Canvas,rcsrc);
  • 3.8. Canvas->CopyMode = cmSrcPaint; 3.9 Canvas->CopyRect(rcdst,b2->Canvas,rcsrc);
  • 4.4. class TForm1 : public TForm { __published: TTimer *Timer1; void __fastcall FormCreate(TObject *Sender); void __fastcall FormPaint(TObject *Sender); void __fastcall Timer1Timer(TObject *Sender); public: __fastcall TForm1(TComponent* Owner); Graphics::TBitmap *b1, *b2; Graphics::TBitmap *MaskBitmap; bool KolF; //флажок для таймера }; void _fastcall TForm1::Timer1Timer(TObject *Sender) { //меняем состояние флажка KolF = ! KolF //явно вызываем метод перерисовки изображения FormPaint(Sender); }
  • 4.5. If (KolF) { rcsrc.Left = 0; rcsrc.Top = 0; rcsrc.Right = 49; Bottom = 49; } else { rcsrc.Left = 50; rcsrc.Top = 0; rcsrc.Right = 50+49; rcsrc.Bottom = 49; }
  • 4.5. If (KolF) { rcsrc.Left = 0; rcsrc.Top = 0; rcsrc.Right = 49; Bottom = 49; } else { rcsrc.Left = 50; rcsrc.Top = 0; rcsrc.Right = 50+49; rcsrc.Bottom = 49; }
  • 4.5. If (KolF) { rcsrc.Left = 0; rcsrc.Top = 0; rcsrc.Right = 49; Bottom = 49; } else { rcsrc.Left = 50; rcsrc.Top = 0; rcsrc.Right = 50+49; rcsrc.Bottom = 49; }
  • Transcript

    • 1.
        Borland C++ Builder:
      • технологии работы с графикой и мультимедиа
      Attribution-ShareAlike (by-sa) — Лицензия «С указанием авторства — Копилефт» stanislav.katsko.name Informatics.ssga.ru
    • 2. 1. Работа с графикой
    • 3. Холст – прямоугольная область для рисования изображений, представленная на форме приложения. Способы создания изображений :
      • поточечно;
      • 4. с помощью функций рисования (методы класса Tcanvas)
        Понятие холста
    • 5. Формы и элементы управления имеют свойство Canvas (формирует графические изображения ). Клиентская область формы (элемента управления) – часть формы, не занятая заголовком, меню, строкой состояния и границами окна. Графический курсор – условная, виртуальная точка, определяющая место начала очередной графической операции.
        Понятие холста
    • 6. При новом появлении области холста на экране изображение, ранее нарисованное на нем, само не восстанавливается. Чтобы изображение сохранялось – создать обработчик системного сообщения WM_PAINT . Соответствующее событие – OnPaint .
        Принцип отрисовки изображений
    • 7. 1. Создается обработчик OnPaint (закладка Events в Инспекторе объектов). 2. Настройка инструментов для создания изображения. 3. В код обработчика добавляются обращения к методам рисования графических примитивов.
        Технология графического вывода
    • 8. 2. Основные графические операции
    • 9. Любая форма содержит холст (свойство Canvas ), но удобнее использовать компонент TPaintBox из группы System палитры инструментов. Для добавленного TPaintBox необходимо подготовить обработчик события OnPaint .
        Подготовка холста
    • 10. Основные инструменты: карандаш (свойство Pen, класс TPen) кисть (свойство Brush, класс TBrush) шрифт (свойство Font, класс TFont) void __fastcall TForm1::PaintBox1Paint (TObject *Sender) { PaintBox1->Canvas->Pen->Color = clGreen; PaintBox1->Canvas->Pen->Width = 3; PaintBox1->Canvas->Brush->Color = clRed; }
        Использование инструментов рисования
    • 11. void __fastcall TForm1::PaintBox1Paint (TObject *Sender) { TRect tc; PaintBox1->Canvas->Pen->Color = clGreen; PaintBox1->Canvas->Pen->Width = 3; PaintBox1->Canvas->Brush->Color = clRed; rc.Left = 5; rc.Right = 100; rc.Top = 0; rc.Bottom = 50; PaintBox1->Canvas->Rectangle(rc); }
        Использование инструментов рисования
    • 12. Метод холста TextOut() PaintBox1->Canvas->TextOut (20,30,"Привет!"); Настройки шрифта задаются в подсвойствах свойства Font. PaintBox1->Canvas->Font->Color = clBlue; PaintBox1->Canvas->Font->Size = 14;
        Вывод текста
    • 13. Класс TBitmap (в модуле Graphics) – можно загружать растровое изображение из файла (*.bmp). Подготовка изображения – компонент TImage из группы Additional палитры компонентов. Свойство Picture , представитель класса TPicture. Свойство AutoSize – автоматическая подстройка размеров.
        Точечные графические изображения
    • 14. 3. Принципы компьютерной анимации
    • 15. Анимация – последовательность кадров (изображений), динамически воспроизводимых через короткие интервалы времени. Формирование кадра анимации: 1. Очищаем холст. 2. Выводим фоновый рисунок. 3. Поверх рисуем отдельные движущиеся части изображения.
        Компьютерная анимация
    • 16. Спрайт – частично прозрачное изображение или набор изображений, который может накладываться и перемещаться по фону или по другому спрайту без необходимости перерисовывать всё окно. Простейший способ создания спрайтов, содержащих прозрачность – использование битовых масок .
        Спрайты
    • 17. Битовая маска – копия рисуемого изображения, в которой его прозрачные и непрозрачные точки помечены разными цветами. В качестве битовой маски часто выступает черно-белое изображение.
        Спрайты
    • 18. Имеется фоновое изображение в файле fon.bmp (вид леса) и анимационный элемент (колобок) в файле kolobok.bmp Изображение «колобка» состоит из двух «склееных» кадров равной ширины, которые сменяют друг друга. Задача : показать анимированного (шагающего) колобка на фоне леса.
        Создание спрайтовой анимации
    • 19. 1.1. Создадим пустое приложение. 1.2. Оптимизируем размер формы в соответствии с размером фонового изображения. 1.3. Добавим две переменные b1 и b2 (класс TBitmap) для хранения фонового изображения и изображения с двумя кадрами колобка. 1.4. Сформируем обработчик создания формы. 1.5. В обработчике создадим графические объекты (экземпляры класса TBitmap), которые будут храниться в b1 и b2. Загрузим в них изображения с помощью метода LoadFromFile.
        1. Подготовка формы
    • 20. 2.1. Создадим обработчик события OnPaint для формы (Инспектор объектов – закладка Events – дважды щелкнуть на строке OnPaint . 2.2. Выведем фоновое изображение в нужную точку холста формы с помощью метода Draw() холста.
        2. Вывод фона
    • 21. 3.1. Определим пространство вывода спрайта. Пусть размеры изображения 50х50. Координаты области вывода зададим константами – соответствует координатам вывода фонового изображения. Для холста нужно задать способ взаимодействия точек исходного и целевого изображений. В свойство холста CopyMode заносится значение cmSrcCopy – все точки изображения заменяются на точки исходного изображения b1.
        3. Вывод спрайта
    • 22. 3.2. Определим в обработчике две переменные класса TRect для хранения координат вывода изображений с исходного холста (внутреннего холста b2, на котором записаны два кадра с колобком) на целевой холст.
        3. Вывод спрайта
    • 23. 3.3. Декларируем в классе TForm1 переменную MaskBitmap для битовой маски. 3.4. Битовая маска будет динамически создаваться на базе исходного изображения b2. Для этого создадим экземпляр класса TBitmap и загрузим в него текущее содержимое переменной b2. Это выполняется методом Assign() класса битовой маски.
        3. Вывод спрайта
    • 24. 3.5. Зададим маске прозрачный цвет исходного изображения. Для этого вызовем метод битовой маски Mask(). В качестве параметра необходимо указать цвет, считающийся в исходном изображении прозрачным. Чтобы маска сформировалась правильно, в исходном изображении все прозрачные точки должны быть черными.
        3. Вывод спрайта
    • 25. 3.6. Определим в функции перерисовки изображения FormPaint() способ комбинирования рисуемой маски с поверхностью холста. В данном случае нужна логическая операция And. Ее обозначение вводят в свойство целевого холста CopyMode.
        3. Вывод спрайта
    • 26. 3.7. На холст формы надо скопировать прямоугольную часть битовой маски. Для этого используем метод CopyRect() холста формы. В качестве первого параметра укажем прямоугольник вывода на целевом холсте формы, вторым параметром – прямоугольник, копируемый с битовой маски.
        3. Вывод спрайта
    • 27. 3.8. Зададим метод комбинирования цветов исходного и целевого холстов при выводе основного изображения спрайта. 3.9. Выполним метод (копирование) основного изображения спрайта поверх выведенной на холст битовой маски. Полученный рисунок будет выглядеть так, как задумывалось. Круглый колобок не будет закрывать элементы фона в пределах прямоугольной области вывода за границей круга.
        3. Вывод спрайта
    • 28. 4.1. Добавим на форму компонент Таймер. 4.2. Введем в свойство Interval значение 500 – таймер будет срабатывать каждый полсекунды. 4.3. Создадим обработчик таймера двойным щелчком на экземпляре компонента TTimer на форме. 4.4. Запишем операторы обработчика таймера. В нем необходимо переключать внутренний флажок KolF, определяющий, какой из двух изображений колобка надо показать. Этот флажок инициализируем в момент создания формы.
        4. Временная анимация
    • 29. 4.5. Модифицируем в обработчике события OnPaint выбор координат изображения спрайта (выбора кадра с колобком) в зависимости от текущего значения переменной KolF. 4.6. Запустим приложение – изображение колобка будет изменяться в два раза в секунду.
        4. Временная анимация
    • 30. 4. Воспроизведение музыкальных и видеоклипов
    • 31. Для воспроизведения музыкальных и видеофайлов предназначен компонент Мультимедийный проигрыватель (TMediaPlayer) из группы System палитры инструментов. Он представляет собой программную оболочку, надстройку над стандартным мультимедийным проигрывателем Windows Media Player, и использует его функции.
        Мультимедиа-файлы
    • 32. После того, как файл загружен в проигрыватель, его воспроизведение начинают вызовом метода Play(). Если во время воспроизведения файла работа программы продолжается – воспроизведение идет в фоновом режиме (свойство Wait). MediaPlayer1->FileName = "song.mp3"; MediaPlayer1->Wait = false; MediaPlayer1->Play(); x=1; //продолжаем вычисления на фоне музыки.
        Мультимедиа-файлы

    ×