Изображения на канве (холсте)
Помимо рисования, на канву можно поместить заранее подготовленное изображение, которое может находится на другой поверхности рисования или в другом графическом объекте. Возможны следующие варианты:
Растровое заполнение изображение с использованием свойства Brush.Bitmap
Пример 13 Заполнение эллипса картинкой из файла
var B:TBitmap;
begin
B:=TBitmap.Create; // создание объекта Bitmap
B.LoadFromFile('Pic.bmp'); // чтение картинки
PB.Canvas.Brush.Bitmap:=B; // картинка для заливки
PB.Canvas.Pen.Color:=clRed;
PB.Canvas.Ellipse(0,0,PB.Width,PB.Height); // рисуем эллипс с заполением
B.Free; // удаление объекта
End;
Копирование прямоугольной области с одного холста ( источника ) в прямоугольную область другого холста ( приемника ). Если источник и приемник имеют разные размеры то изображение масштабируется под размеры приемника. Приемником и источником может быть одна и та же канва. Для этого используется процедура CopyRect.
CopyRect(Dest:TRect; Canvas:TCanvas; Source: TRect)
Источник определяется прямоугольной областью Source канвой Canvas. Прямоугольная область приемника определяется Dest, а канва приемника определяется данным методом. Режим копирования определяется свойством холста CopyMode. С его помощью можно получить различные графические (цветовые) эффекты.
Пример 14 Копирование клиентской области из Image в клиентскую область Form
Form1.Canvas.CopyRect(Form1.Canvas.ClipRect, Image1.Canvas, Image1.Canvas.ClipRect);
Данный метод можно использовать при анимации. Для чего необходимо:
Вывести объект на экран
Стереть объект с экрана
Вывести с некоторым смещением этот объект
Для вывода объекта используется один источник, например прямоугольная область с кругом. А для очистки применяется другая прямоугольная область с фоном.
Пример 15 Перемещение круга по горизонтали (анимация).
var
R1,R2,R3:TRect;
begin
R1.Top:=0; R1.Left:=0; R1.Bottom:=50; R1.Right:=50; // область для круга
R2.Top:=100; R2.Left:=100; R2.Bottom:=150; R2.Right:=150; // область для фона
R3:=R1; // область приемника
for i:=1 to 400 do
begin
PB1.Canvas.CopyRect(R3,Im.Canvas,R2); // Стереть объект (цвет фона)
R3.Top:=0; R3.Left:=R3.Left+1; // Смещение области приемника
R3.Bottom:=50; R3.Right:=R3.Right+1;
PB1.Canvas.CopyRect(R3,Im.Canvas,R1); // Показ объекта в приемнике
end;
end;
Вывод изображения на поверхность рисования осуществляет процедура Draw(x,y:Integer; Graphic:TGraphic), где x,y – координаты левого верхнего угла области вывода, а Graphic – растровый массив (изображение). Возможен вывод изображения в прямоугольную область, при этом используется процедура
StretchDraw(Rect:TRect; Graphic:TGraphic).
Пример 16 Вывод изображения на холст из файла
var Pic:TBitmap;
begin
Pic:=TBitmap.Create; // создание объекта Bitmap
Pic.LoadFromFile('Photo.bmp'); // чтение картинки
Form1.Canvas.Draw(10,20,Pic); // вывод картинки на холст
Pic.Free; // удаление объекта
end;