Примеры Delphi и C# из жизни

Примеры программирования на языках Delphi, C#

 




Вывод заполненного текстурой текста с помощью GDI+ | Delphi

В предыдущем примере мы рассмотрели вариант заполнения контура сплошным цветом. В данном материале заполним его выбранной текстурой.

Для заполнения текстурой используем текстурную кисть — TGPTextureBrush.
В конструкторе кисти можно задать используемое в качестве заполнителя изображение. Также может задаваться стиль заполнения (WrapMode….) и используемая область исходного изображения (x1, y1, widthX, widthY).

texture := TGPTextureBrush.Create(image, WrapMode…, x1, y1, widthX, widthY);

WrapModeTile — заполнять область "черепицей"
WrapModeTileFlipX  — заполнять область "черепицей» с отражением текстуры по оси X
WrapModeTileFlipY  — заполнять область "черепицей» с отражением текстуры по оси Y
WrapModeTileFlipXY — заполнять область "черепицей» с отражением текстуры по осям X и Y
WrapModeClamp — не заполнять


Пример:
procedure TForm1.FormPaint(Sender: TObject);
var
  texture: TGPTextureBrush;
  image: TGPImage;
  g: TGPGraphics;
  path: TGPGraphicsPath;
  pen: TGPPen;
  brush: TGPSolidBrush;
  font_family: TGPFontFamily;
  string_format: TGPStringFormat;
  text: WideString;
begin
  image := TGPImage.Create('c:cat.png'); // загружаем текстуру
  texture := TGPTextureBrush.Create(image); // и создаем на ее основе кисть
  g := TGPGraphics.Create(Canvas.Handle);
  path := TGPGraphicsPath.Create(); // создаем графический путь
  pen := TGPPen.Create(aclRoyalBlue, -1); // определяем обтравочную линию шириной 1 пиксел
  font_family := TGPFontFamily.Create('Arial'); // определяем шрифт
  string_format := TGPStringFormat.Create(); // формат отрисовки
  text := 'Йа креветко !';
  // добавляем к пути текст:
  // шрифт Arial, жирное начертание, размером 120, рисовать начинаем в позиции x:0, y:10
  // также можем задать формат отображения текста. К примеру для вертикальной отрисовки:
  // string_format := TGPStringFormat.Create(StringFormatFlagsDirectionVertical);
  path.AddString(text, -1, font_family, FontStyleBold, 120, MakePoint(0, 10), string_format);
  // заполняем контур текста текстурой
  g.FillPath(texture, path);

  // заполняем текстурой фигуру
  g.FillEllipse(texture, 150, 150, 100, 150);

  // рисуем контур
  g.DrawPath(pen, path);
  string_format.Free;
  font_family.Free;
  pen.Free;
  path.Free;
  g.Free;
  texture.Free;
  image.Free;
end;


заполнение текстурой