Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СППО.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
738.3 Кб
Скачать

17. Свойства и методы Tcanvas

Обеспечивает пространство (холст, канву) для создания, хранения и модификации графических объектов

Модуль graphics

Класс TCanvas является основой графической подсистемы Delphi. Канва обеспечивает:

· Загрузку и хранение графических изображений

· Создание новых и изменение хранимых изображений с помощью пера, кисти, шрифта

· Рисование и закраску различных фигур, линий, текстов

· Комбинирование различных изображений

Свойства:

  • Brush Определяет цвет и стиль заполнения замкнутых фигур и фона.

  • Canvas Orientation Определяет обычную (слева направо) и восточную (справа налево) ориентацию канвы и ее координат. Свойство только для чтения.

  • ClipRect Определяет доступную область рисования на канве и область, подлежащую перерисовке при событии OnPaint. Свойство только для чтения.

  • CopyMode Определяет режим копирования графического изображения на канву.

  • Font Определяет атрибуты шрифта, которым выводится текст

  • Handle Дескриптор канвы

  • LockCount Определяет, сколько раз блокирована канва в многопоточных приложениях. Свойство только для чтения.

  • Pen Определяет свойства пера, рисующего линии и фигуры.

  • PenPos Определяет текущую позицию пера.

  • Pixels Определяет цвета пикселей.

  • TextFlags Определяет способ вывода текста на канву.

Некоторые методы:

  • Draw Рисует графическое изображение в указанную позицию канвы

  • LineTo Рисует на канве прямую линию, начинающуюся с текущей позиции пера и кончающуюся указанной точкой

  • MoveTo Изменяет текущую позицию пера на заданную, ничего не рисуя

  • TextOut Пишет указанную строку текста на канве, начиная с указанной позиции

  • Rectangle Рисует прямоугольник

Нарисовать на форме прямоугольник: MainForm.Canvas.Rectangle (10, 10, 200, 100)

18. Встроенные графические классы

Свойства и методы TCanvas предназначены для создания новых изображений, но в Delphi имеются также несколько классов для хранения и обработки изображений, уже созданных в различных графических форматах . Эти классы не являются компонентами, их экземпляры нужно создавать «вручную». Три вида изображений, стандартных для Windows, инкапсулированы в классах TBitMap (битовая карта, растровая картинка), TIcon (значок), TMetaFile (метафайл). Для работы с популярным форматом Jpeg предназначен класс TJpegImage. Эти четыре класса являются потомками абстрактного класса TGraphic.

Опишем некоторые основные методы и свойства, используемые далее в лабораторных работах. На уровне TGraphic определены:

procedure LoadFromFile(const FileName: string); virtual;

Загрузка изображения из файла

procedure SaveToFile(const FileName: string); virtual;

Запись изображения в файл

property Empty: Boolean;

истина, если объект не содержит данных

property Height: Integer;

высота графического объекта

property Width: Integer;

ширина

property Transparent: Boolean;

прозрачен ли объект при отрисовке

Первые два метода перекрываются в классах потомках.

Свойства TbitMap:

property TransparentColor: TColor;

Цвет, который будет прозрачным, если TransparentMode = tMFixed и Transparent=True

property TransparentMode: TTransparentMode; type TTransparentMode= (tmAuto, tmFixed);

Если tmAuto, прозрачны будут участки с цветом верхнего левого пиксела

property Canvas: TCanvas;

Холст для рисования (имеется только у TBitMap!)

Изображения формата Jpeg получаются сжатием изображений в формате битовой карты. Соответственно следующее свойство TJpegImage

property CompressionQuality: TJPEGQualityRange;

type TJPEGQualityRange = 1..100

определяет качество сжатого изображения и его размер (значение по умолчанию 75), а метод Compress сжимает Jpeg-изображение с учетом этого значения.

Метод

procedure Assign(Source: TPersistent); override;

классов TJpegImage и TBitMap копирует изображение из Source в объект, вызвавший этот метод, при этом происходит преобразование форматов.

Часто бывает удобно пользоваться классом TPicture, который является надстройкой над TBitMap, TJpegImage, TIcon, TMetaFile и может содержать объекты любого из этих классов.

Объекты хранятся в его свойстве Graphic: TGraphic (к ним также можно обратиться через одноименные свойства TPicture). Методы SaveToFile и LoadFromFile класса TPicture анализируют тип файла по его расширению и вызывают методы SaveToFile и LoadFromFile соответствующих объектов, например TBitMap.

Следующий простой пример демонстрирует использование объекта TBitMap для построения движущихся частично прозрачных изображений. Изображение (эллипс, вписанный в прямоугольник) рисуется на BitMap и двигается по окружности при наступлении события OnTimer компонента TTimer. Интервал Timer1.Interval между событиями OnTimer вводится с помощью TEdit.

unit Unit1;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls;

type

TForm1 = class(TForm)

Timer1: TTimer;

UpDown1: TUpDown;

Edit1: TEdit;

procedure FormCreate(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure Edit1Change(Sender: TObject);

procedure FormPaint(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

var x, y, orbita, rad: integer;

angle,pi20: real;

b, pic, buffer: TBitMap;

Dest, Source: Trect;

procedure TForm1.FormCreate(Sender: TObject);

begin

b:=TBitMap.Create;

b.LoadFromFile('athena.bmp');

angle:=pi/2;

pi20:=pi/20;

clientwidth:=400;

ClientHeight:=400;

rad:= clientwidth div 4;

orbita:=clientwidth div 2 - rad;

x:=orbita;

y:=0;

buffer:=TBitMap.Create;

buffer.Height:=rad;

buffer.Width:=rad*2;

Pic:=TBitMap.Create;// Создание картинки

Pic.Height:=rad;

Pic.Width:=rad*2;

with pic.Canvas do begin

pen.Color:=clGreen;

brush.Color:=clGreen;

Rectangle(0,0,rad*2,rad);

pen.color:=clBlue;

brush.Color:=ClBlue;

Ellipse(0,0,rad*2,rad);

end;

{Прозрачным на картинке будет голубой цвет}

Pic.TransparentColor:=clBlue;

Pic.Transparent:=true; // Активизация прозрачности

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

{ Восстановить фон из buffer}

Canvas.CopyRect(Source, buffer.Canvas, Dest);

angle := angle+pi20;

x := orbita+round(orbita*cos(angle));

y := orbita-round(orbita*sin(angle));

{ Запомнить фон нового места в буфере}

Source := Rect(x,y,x+2*rad,y+rad);

Dest := Rect(0,0,2*rad,rad);

buffer.Canvas.CopyRect(Dest, Canvas, Source);

{ Нарисовать картинку на новом месте}

Canvas.Draw(x,y,Pic);

end;

procedure TForm1.Edit1Change(Sender: TObject);

begin

Timer1.Interval:=StrToInt(Edit1.Text);

end;

procedure TForm1.FormPaint(Sender: TObject);

begin

Source:=rect(x,y,x+2*rad,y+rad);

Dest:=rect(0,0,2*rad,rad);

with Canvas do begin

StretchDraw(ClientRect,b); // Вывод обоев

buffer.Canvas.CopyRect(dest,Canvas,Source);

Draw(x,y,Pic); // Вывод картинки

end;

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]