Поделиться через


Метод PathGradientBrush::MultiplyTransform (gdipluspath.h)

Метод PathGradientBrush::MultiplyTransform обновляет матрицу преобразования кисти с помощью собственного произведения и другой матрицы.

Синтаксис

Status MultiplyTransform(
  [in] const Matrix *matrix,
  [in] MatrixOrder  order
);

Параметры

[in] matrix

Тип: Матрица*

Указатель на матрицу, которая будет умножена на текущую матрицу преобразования кисти.

[in] order

Тип: MatrixOrder

Необязательный элемент. Элемент перечисления MatrixOrder , указывающий порядок умножения. MatrixOrderPrepend указывает, что переданная матрица находится слева, а MatrixOrderAppend указывает, что переданная матрица находится справа. Значение по умолчанию — MatrixOrderPrepend.

Возвращаемое значение

Тип: Состояние

В случае успешного выполнения метода возвращается ОК, который является элементом перечисления Status .

Если метод завершается сбоем, он возвращает один из других элементов перечисления Status .

Комментарии

В одной матрице 3 ×3 может храниться любая последовательность аффинных преобразований. При наличии нескольких трех матриц ×3, каждая из которых представляет аффинное преобразование, произведением этих матриц будет одна матрица из 3 ×3, представляющая всю последовательность преобразований. Преобразование, представленное этим продуктом, называется составным преобразованием. Например, предположим, что матрица R представляет поворот, а матрица T — перевод. Если matrix M является RT продукта, то матрица M представляет составное преобразование: сначала вращать, а затем переводить.

Важен порядок умножения матриц. Как правило, rt матричного продукта отличается от TR матричного продукта. В примере, приведенном в предыдущем абзаце, составное преобразование, представленное RT (сначала повернуть, а затем перевести), отличается от составного преобразования, представленного TR (сначала перевести, а затем повернуть).

Примеры

В следующем примере создается объект PathGradientBrush на основе треугольного пути. Код вызывает метод PathGradientBrush::ScaleTransform объекта PathGradientBrush для заполнения матрицы преобразования кисти элементами, представляющими горизонтальное масштабирование в 3 раз. Затем код вызывает метод PathGradientBrush::MultiplyTransform того же объекта PathGradientBrush , чтобы умножить существующую матрицу преобразования кисти на матрицу, представляющую преобразование (10 справа, 30 вниз). Аргумент MatrixOrderAppend указывает, что умножение выполняется с матрицей преобразования справа.

После умножения матрица преобразования кисти представляет составное преобразование: сначала масштабировать, а затем переводить. Это составное преобразование применяется к пути границы кисти во время вызова FillRectangle, поэтому закрашивается область внутри преобразованного пути.

VOID Example_MultiplyTransform(HDC hdc)
{
   Graphics graphics(hdc);
   Point pts[] = {Point(0, 0), Point(50, 0), Point(50, 50)};

   // Translate 10 right, 30 down.
   Matrix matrix(1.0f, 0.0f, 0.0f, 1.0f, 10.0f, 30.0f);

   PathGradientBrush pthGrBrush(pts, 3);
   pthGrBrush.ScaleTransform(3.0f, 1.0f);
   pthGrBrush.MultiplyTransform(&matrix, MatrixOrderAppend);

   graphics.FillRectangle(&pthGrBrush, 0, 0, 200, 200);  
}

Требования

Требование Значение
Минимальная версия клиента Windows XP, Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header gdipluspath.h (включая Gdiplus.h)
Библиотека Gdiplus.lib
DLL Gdiplus.dll

См. также раздел

Кисти и закрашенные фигуры

Создание градиента пути

Заполнение фигуры цветным градиентом

Матрица

Матричное представление преобразований

MatrixOrder

PathGradientBrush

PathGradientBrush::GetTransform

PathGradientBrush::ResetTransform

PathGradientBrush::RotateTransform

PathGradientBrush::ScaleTransform

PathGradientBrush::SetTransform

PathGradientBrush::TranslateTransform

Преобразования