Rysowanie obiektów graficznych
Grafika interfejsu użytkownika aplikacji wieloplatformowej .NET (.NET MAUI) w Microsoft.Maui.Graphics przestrzeni nazw umożliwia rysowanie obiektów graficznych na kanwie zdefiniowanej ICanvas jako obiekt.
Kontrolka .NET MAUI GraphicsView zapewnia dostęp do obiektu, na którym można ustawić ICanvas właściwości i metody wywoływane w celu rysowania obiektów graficznych. Aby uzyskać więcej informacji na temat obiektu GraphicsView, zobacz GraphicsView.
Uwaga
Wiele obiektów graficznych ma Draw
i Fill
metody, na przykład DrawRectangle i FillRectangle. Metoda Draw
rysuje kontur kształtu, który nie jest wypełniany. Metoda Fill
rysuje kontur kształtu, a także wypełnia go.
Obiekty graficzne są rysowane przy użyciu jednostki niezależnej ICanvas od urządzenia, która jest rozpoznawana przez każdą platformę. Dzięki temu obiekty graficzne są odpowiednio skalowane do gęstości pikseli bazowej platformy.
Rysowanie linii
Linie można narysować przy ICanvas użyciu DrawLine metody , która wymaga czterech float
argumentów reprezentujących punkty początkowe i końcowe linii.
W poniższym przykładzie pokazano, jak narysować linię:
canvas.StrokeColor = Colors.Red;
canvas.StrokeSize = 6;
canvas.DrawLine(10, 10, 90, 100);
W tym przykładzie czerwona linia ukośna jest pobierana z (10 10) do (90 100):
W poniższym przykładzie pokazano, jak narysować linię przerywaną:
canvas.StrokeColor = Colors.Red;
canvas.StrokeSize = 4;
canvas.StrokeDashPattern = new float[] { 2, 2 };
canvas.DrawLine(10, 10, 90, 100);
W tym przykładzie czerwona linia ukośna kreskowana jest rysowana z (10 10 10) do (90 100):
Aby uzyskać więcej informacji na temat linii przerywanych, zobacz Rysowanie obiektów przerywanych.
Rysowanie wielokropka
Wielokropek i okręgi można narysować przy ICanvas użyciu DrawEllipse metody , która wymaga x
argumentów , , width
y
i height
typu float
.
W poniższym przykładzie pokazano, jak narysować wielokropek:
canvas.StrokeColor = Colors.Red;
canvas.StrokeSize = 4;
canvas.DrawEllipse(10, 10, 100, 50);
W tym przykładzie zostanie narysowany czerwony wielokropek o wymiarach 100x50 (10 10):
Aby narysować okrąg, ustaw width
argumenty i height
na metodę równą DrawEllipse :
canvas.StrokeColor = Colors.Red;
canvas.StrokeSize = 4;
canvas.DrawEllipse(10, 10, 100, 100);
W tym przykładzie zostanie narysowane czerwone kółko o wymiarach 100x100 (10 10):
Uwaga
Okręgi można również narysować za pomocą DrawCircle metody .
Aby uzyskać informacje na temat rysowania kreskowanego wielokropka, zobacz Rysowanie obiektów przerywanych.
Wypełniony wielokropek można narysować za pomocą FillEllipse metody , która wymaga x
również argumentów , , y
width
i height
typu float
:
canvas.FillColor = Colors.Red;
canvas.FillEllipse(10, 10, 150, 50);
W tym przykładzie zostanie narysowany czerwony wielokropek z wymiarami 150x50 (10 10):
Właściwość FillColor ICanvas obiektu musi być ustawiona na przed Color wywołaniem FillEllipse metody .
Wypełnione okręgi można również narysować za pomocą FillCircle metody .
Uwaga
DrawEllipse FillEllipse Istnieją i przeciążenia, które przyjmują Rect argumenty i RectF . Ponadto istnieją również DrawCircle przeciążenia i FillCircle przeciążenia.
Rysowanie prostokąta
Prostokąty i kwadraty można narysować przy ICanvas użyciu DrawRectangle metody , która wymaga x
argumentów , , width
y
i height
typu float
.
W poniższym przykładzie pokazano, jak narysować prostokąt:
canvas.StrokeColor = Colors.DarkBlue;
canvas.StrokeSize = 4;
canvas.DrawRectangle(10, 10, 100, 50);
W tym przykładzie jest rysowany ciemnoniebieski prostokąt o wymiarach 100x50 (10 10):
Aby narysować kwadrat, ustaw width
argumenty i height
na metodę równą DrawRectangle :
canvas.StrokeColor = Colors.DarkBlue;
canvas.StrokeSize = 4;
canvas.DrawRectangle(10, 10, 100, 100);
W tym przykładzie jest rysowany ciemnoniebieski kwadrat o wymiarach 100x100 (10 10):
Aby uzyskać informacje na temat rysowania kreskowanego prostokąta, zobacz Rysowanie obiektów przerywanych.
Wypełniony prostokąt można narysować za pomocą FillRectangle metody , która wymaga x
również argumentów , , y
width
i height
typu float
:
canvas.FillColor = Colors.DarkBlue;
canvas.FillRectangle(10, 10, 100, 50);
W tym przykładzie jest rysowany ciemnoniebieski prostokąt z wymiarami 100x50 (10 10):
Właściwość FillColor ICanvas obiektu musi być ustawiona na przed Color wywołaniem FillRectangle metody .
Uwaga
DrawRectangle FillRectangle Istnieją i przeciążenia, które przyjmują Rect argumenty i RectF .
Rysowanie zaokrąglonego prostokąta
Zaokrąglone prostokąty i kwadraty można narysować przy ICanvas użyciu DrawRoundedRectangle metody , która wymaga x
argumentów , , y
, width
height
, i cornerRadius
typu float
. Argument cornerRadius
określa promień używany do zaokrąglania narożników prostokąta.
W poniższym przykładzie pokazano, jak narysować zaokrąglony prostokąt:
canvas.StrokeColor = Colors.Green;
canvas.StrokeSize = 4;
canvas.DrawRoundedRectangle(10, 10, 100, 50, 12);
W tym przykładzie jest rysowany zielony prostokąt z zaokrąglonymi rogami i wymiarami 100x50 na (10 10 10):
Aby uzyskać informacje na temat rysowania zaokrąglonego prostokąta kreskowanego, zobacz Rysowanie obiektów przerywanych.
Wypełniony prostokąt zaokrąglony można narysować za FillRoundedRectangle pomocą metody , która wymaga x
również argumentów , , y
width
, height
i cornerRadius
typu float
:
canvas.FillColor = Colors.Green;
canvas.FillRoundedRectangle(10, 10, 100, 50, 12);
W tym przykładzie jest rysowany zielony prostokąt z zaokrąglonymi rogami i wymiarami 100x50 na (10 10 10):
Właściwość FillColor ICanvas obiektu musi być ustawiona na przed Color wywołaniem FillRoundedRectangle metody .
Uwaga
Istnieją DrawRoundedRectangle FillRoundedRectangle i przeciążenia, które przyjmują Rect i RectF argumenty, i przeciążenia, które umożliwiają oddzielnie określony promień każdego rogu.
Rysowanie łuku
Łuki można narysować przy ICanvas użyciu DrawArc metody , która wymaga x
argumentów float
typu , , startAngle
endAngle
width
height
y
i .closed
bool
clockwise
Argument startAngle
określa kąt od osi x do punktu początkowego łuku. endAngle
Argument określa kąt z osi x do punktu końcowego łuku. clockwise
Argument określa kierunek, w którym jest rysowany łuk, a closed
argument określa, czy punkt końcowy łuku będzie połączony z punktem początkowym.
W poniższym przykładzie pokazano, jak narysować łuk:
canvas.StrokeColor = Colors.Teal;
canvas.StrokeSize = 4;
canvas.DrawArc(10, 10, 100, 100, 0, 180, true, false);
W tym przykładzie narysowany jest tealny łuk wymiarów 100x100 (10 10). Łuk jest rysowany w kierunku wskazówek zegara od 0 stopni do 180 stopni i nie jest zamknięty:
Aby uzyskać informacje na temat rysowania łuku kreskowanego, zobacz Rysowanie obiektów przerywanych.
Wypełniony łuk można narysować za pomocą FillArc metody , która wymaga x
argumentów float
typu startAngle
height
width
, y
i endAngle
clockwise
argumentów typu bool
:
canvas.FillColor = Colors.Teal;
canvas.FillArc(10, 10, 100, 100, 0, 180, true);
W tym przykładzie narysowany jest wypełniony tekstowy łuk wymiarów 100x100 (10 10). Łuk jest rysowany w kierunku wskazówek zegara od 0 stopni do 180 stopni i jest zamykany automatycznie:
Właściwość FillColor ICanvas obiektu musi być ustawiona na przed Color wywołaniem FillArc metody .
Rysowanie ścieżki
Ścieżka jest kolekcją co najmniej jednego konturu. Każdy kontur jest kolekcją połączonych linii prostych i krzywych. Kontury nie są ze sobą połączone, ale mogą się wizualnie nakładać. Czasami pojedynczy kontur może się nakładać.
Ścieżki służą do rysowania krzywych i złożonych kształtów i mogą być rysowane przy ICanvas użyciu DrawPath metody , która wymaga argumentu PathF .
Kontur zwykle zaczyna się od wywołania PathF.MoveTo metody, którą można wyrazić jako PointF wartość lub jako osobne x
i y
współrzędne. Wywołanie MoveTo ustanawia punkt na początku konturu i początkowy punkt bieżący. Następnie można wywołać następujące metody, aby kontynuować kontur z linią lub krzywą z bieżącego punktu do punktu określonego w metodzie, który następnie staje się nowym bieżącym punktem:
- LineTo aby dodać linię prostą do ścieżki.
- AddArc aby dodać łuk, który jest linią na obwodzie koła lub wielokropka.
- CurveTo aby dodać sześcienną krzywą Beziera.
- QuadTo aby dodać ćwiartkę bezierową.
Żadna z tych metod nie zawiera wszystkich danych niezbędnych do opisania linii lub krzywej. Zamiast tego każda metoda współpracuje z bieżącym punktem ustalonym przez wywołanie metody bezpośrednio przed nim. Na przykład LineTo metoda dodaje linię prostą do konturu na podstawie bieżącego punktu.
Kontur kończy się innym wywołaniem MoveTometody , która rozpoczyna nowy kontur lub wywołanie Closemetody , która zamyka kontur. Metoda Close automatycznie dołącza linię prostą z bieżącego punktu do pierwszego punktu konturu i oznacza ścieżkę jako zamkniętą.
Klasa PathF definiuje również inne metody i właściwości. Następujące metody dodają całe kontury do ścieżki:
- AppendEllipse dołącza zamknięty kontur wielokropka do ścieżki.
- AppendCircle dołącza do ścieżki zamknięty kontur okręgu.
- AppendRectangle dołącza zamknięty kontur prostokąta do ścieżki.
- AppendRoundedRectangle Dołącza zamknięty prostokąt z zaokrąglonymi rogami do ścieżki.
W poniższym przykładzie pokazano, jak narysować ścieżkę:
PathF path = new PathF();
path.MoveTo(40, 10);
path.LineTo(70, 80);
path.LineTo(10, 50);
path.Close();
canvas.StrokeColor = Colors.Green;
canvas.StrokeSize = 6;
canvas.DrawPath(path);
W tym przykładzie rysowany jest zamknięty zielony trójkąt:
Wypełniona ścieżka może zostać narysowana za pomocą elementu , który również wymaga argumentuFillPathPathF:
PathF path = new PathF();
path.MoveTo(40, 10);
path.LineTo(70, 80);
path.LineTo(10, 50);
canvas.FillColor = Colors.SlateBlue;
canvas.FillPath(path);
W tym przykładzie narysowany jest wypełniony niebieski trójkąt łupkowy:
Właściwość FillColor ICanvas obiektu musi być ustawiona na przed Color wywołaniem FillPath metody .
Ważne
Metoda FillPath ma przeciążenie, które umożliwia WindingMode określenie wartości , która ustawia używany algorytm wypełniania. Aby uzyskać więcej informacji, zobacz Tryby uzwojenia.
Rysowanie obrazu
Obrazy można narysować przy ICanvas użyciu DrawImage metody , która wymaga IImage argumentu i x
, y
, width
i height
argumentów typu float
.
W poniższym przykładzie pokazano, jak załadować obraz i narysować go na kanwę:
using System.Reflection;
using IImage = Microsoft.Maui.Graphics.IImage;
using Microsoft.Maui.Graphics.Platform;
IImage image;
Assembly assembly = GetType().GetTypeInfo().Assembly;
using (Stream stream = assembly.GetManifestResourceStream("GraphicsViewDemos.Resources.Images.dotnet_bot.png"))
{
image = PlatformImage.FromStream(stream);
}
if (image != null)
{
canvas.DrawImage(image, 10, 10, image.Width, image.Height);
}
W tym przykładzie obraz jest pobierany z zestawu i ładowany jako strumień. Następnie jest rysowany przy rzeczywistym rozmiarze (10 10):
Ważne
Ładowanie obrazu osadzonego w zestawie wymaga, aby obraz miał ustawioną akcję kompilacji na wartość Zasób osadzony, a nie MauiImage.
Rysowanie ciągu
Ciągi można narysować ICanvas przy użyciu jednego z DrawString przeciążeń. Wygląd każdego ciągu można zdefiniować, ustawiając Fontwłaściwości , FontColori FontSize . Wyrównanie ciągów można określić za pomocą opcji wyrównania poziomego i pionowego, które wykonują wyrównanie w polu ograniczenia ciągu.
Uwaga
Pole ograniczenia dla ciągu jest definiowane przez argumenty x
, , y
width
i height
.
W poniższych przykładach pokazano, jak rysować ciągi:
canvas.FontColor = Colors.Blue;
canvas.FontSize = 18;
canvas.Font = Font.Default;
canvas.DrawString("Text is left aligned.", 20, 20, 380, 100, HorizontalAlignment.Left, VerticalAlignment.Top);
canvas.DrawString("Text is centered.", 20, 60, 380, 100, HorizontalAlignment.Center, VerticalAlignment.Top);
canvas.DrawString("Text is right aligned.", 20, 100, 380, 100, HorizontalAlignment.Right, VerticalAlignment.Top);
canvas.Font = Font.DefaultBold;
canvas.DrawString("This text is displayed using the bold system font.", 20, 140, 350, 100, HorizontalAlignment.Left, VerticalAlignment.Top);
canvas.Font = new Font("Arial");
canvas.FontColor = Colors.Black;
canvas.SetShadow(new SizeF(6, 6), 4, Colors.Gray);
canvas.DrawString("This text has a shadow.", 20, 200, 300, 100, HorizontalAlignment.Left, VerticalAlignment.Top);
W tym przykładzie są wyświetlane ciągi z różnymi opcjami wyglądu i wyrównania:
Uwaga
Przeciążenia DrawString umożliwiają również określenie obcinania i odstępów między wierszami.
Aby uzyskać informacje o cieniach rysunku, zobacz Rysowanie cienia.
Rysuj tekst przypisany
Tekst przypisany można narysować przy ICanvas użyciu DrawText metody , która wymaga IAttributedText argumentu , i x
, y
width
i height
argumentów float
typu . Tekst przypisany to ciąg ze skojarzonymi atrybutami dla części tekstu, który zazwyczaj reprezentuje dane stylizowane.
W poniższym przykładzie pokazano, jak narysować tekst przypisany:
using Microsoft.Maui.Graphics.Text;
...
canvas.Font = new Font("Arial");
canvas.FontSize = 18;
canvas.FontColor = Colors.Blue;
string markdownText = @"This is *italic text*, **bold text**, __underline text__, and ***bold italic text***.";
IAttributedText attributedText = MarkdownAttributedTextReader.Read(markdownText); // Requires the Microsoft.Maui.Graphics.Text.Markdig package
canvas.DrawText(attributedText, 10, 10, 400, 400);
W tym przykładzie język Markdown jest konwertowany na tekst przypisany i wyświetlany przy użyciu poprawnego stylu:
Ważne
Rysowanie tekstu przypisanego wymaga dodania Microsoft.Maui.Graphics.Text.Markdig
pakietu NuGet do projektu.
Rysuj z wypełnieniem i pociągnięciem
Obiekty graficzne z wypełnieniem i pociągnięciem mogą być rysowane na kanwie przez wywołanie metody draw po metodzie fill. Aby na przykład narysować konturowy prostokąt, ustaw FillColor właściwości i StrokeColor na kolory, a następnie wywołaj FillRectangle metodę, po której następuje DrawRectangle metoda .
Poniższy przykład rysuje wypełniony okrąg z konturem pociągnięcia jako ścieżką:
float radius = Math.Min(dirtyRect.Width, dirtyRect.Height) / 4;
PathF path = new PathF();
path.AppendCircle(dirtyRect.Center.X, dirtyRect.Center.Y, radius);
canvas.StrokeColor = Colors.Blue;
canvas.StrokeSize = 10;
canvas.FillColor = Colors.Red;
canvas.FillPath(path);
canvas.DrawPath(path);
W tym przykładzie określono kolory PathF pociągnięcia i wypełnienia dla obiektu. Wypełniony okrąg jest rysowany, a następnie obrys obramowania okręgu:
Ostrzeżenie
Wywołanie metody draw przed metodą fill spowoduje niepoprawną kolejność z. Wypełnienie zostanie narysowane na pociągnięciu, a pociągnięcie nie będzie widoczne.
Rysowanie cienia
Obiekty graficzne rysowane na obiekcie ICanvas mogą mieć zastosowany cień przy użyciu SetShadow metody , która przyjmuje następujące argumenty:
offset
, typu SizeF, określa przesunięcie cienia, który reprezentuje położenie źródła światła, które tworzy cień.blur
, typufloat
, reprezentuje ilość rozmycia do zastosowania do cienia.color
, typu Color, definiuje kolor cienia.
W poniższych przykładach pokazano, jak dodać cienie do wypełnionych obiektów:
canvas.FillColor = Colors.Red;
canvas.SetShadow(new SizeF(10, 10), 4, Colors.Grey);
canvas.FillRectangle(10, 10, 90, 100);
canvas.FillColor = Colors.Green;
canvas.SetShadow(new SizeF(10, -10), 4, Colors.Grey);
canvas.FillEllipse(110, 10, 90, 100);
canvas.FillColor = Colors.Blue;
canvas.SetShadow(new SizeF(-10, 10), 4, Colors.Grey);
canvas.FillRoundedRectangle(210, 10, 90, 100, 25);
W tych przykładach cienie, których źródła światła znajdują się w różnych pozycjach, są dodawane do wypełnionych obiektów, z identycznymi ilościami rozmycia:
Rysowanie obiektów przerywanych
ICanvas obiekty mają StrokeDashPattern właściwość typu float[]
. Ta właściwość jest tablicą float
wartości, które wskazują wzorzec kreski i przerw, które mają być używane podczas rysowania pociągnięcia dla obiektu. Każda float
z tablicy określa długość kreski lub szczeliny. Pierwszy element w tablicy określa długość kreski, a drugi element w tablicy określa długość odstępu. float
Dlatego wartości z parzystą wartością indeksu określają kreski, a float
wartości z nieparzystną wartością indeksu określają luki.
W poniższym przykładzie pokazano, jak narysować kwadrat przerywany przy użyciu zwykłego kreski:
canvas.StrokeColor = Colors.Red;
canvas.StrokeSize = 4;
canvas.StrokeDashPattern = new float[] { 2, 2 };
canvas.DrawRectangle(10, 10, 90, 100);
W tym przykładzie jest rysowany kwadrat z regularnym kreskowanym pociągnięciem:
W poniższym przykładzie pokazano, jak narysować kwadrat kreskowany przy użyciu nieregularnej kreski:
canvas.StrokeColor = Colors.Red;
canvas.StrokeSize = 4;
canvas.StrokeDashPattern = new float[] { 4, 4, 1, 4 };
canvas.DrawRectangle(10, 10, 90, 100);
W tym przykładzie jest rysowany kwadrat z nieregularnym kreskowanym pociągnięciem:
Końce linii sterowania
Linia ma trzy części: czapkę początkową, treść linii i czapkę końcową. Limity początkowe i końcowe opisują początek i koniec wiersza.
ICanvas obiekty mają StrokeLineCap właściwość typu LineCap, która opisuje początek i koniec wiersza. Wyliczenie LineCap definiuje następujące elementy członkowskie:
Butt
, który reprezentuje linię z końcu kwadratowym, rysowany w celu rozszerzenia do dokładnego punktu końcowego linii. Jest to wartość domyślna StrokeLineCap właściwości.Round
, który reprezentuje linię z zaokrąglonym końcem.Square
, który reprezentuje linię z końcu kwadratowym, rysowany tak, aby wykraczał poza punkt końcowy na odległość równą połowie szerokości linii.
W poniższym przykładzie pokazano, jak ustawić StrokeLineCap właściwość:
canvas.StrokeSize = 10;
canvas.StrokeColor = Colors.Red;
canvas.StrokeLineCap = LineCap.Round;
canvas.DrawLine(10, 10, 110, 110);
W tym przykładzie czerwona linia jest zaokrąglona na początku i na końcu wiersza:
Sprzężenia linii sterowania
ICanvas obiekty mają StrokeLineJoin właściwość typu LineJoin, która określa typ sprzężenia używanego w wierzchołkach obiektu. Wyliczenie LineJoin definiuje następujące elementy członkowskie:
Miter
, który reprezentuje kątowe wierzchołki, które tworzą ostry lub obcięty róg. Jest to wartość domyślna StrokeLineJoin właściwości.Round
, który reprezentuje zaokrąglone wierzchołki, które tworzą okrągły łuk w rogu.Bevel
, który reprezentuje skośne wierzchołki, które tworzą ukośny róg.
Uwaga
StrokeLineJoin Gdy właściwość jest ustawiona na Miter
wartość , MiterLimit
właściwość można ustawić na wartość , float
aby ograniczyć długość miter sprzężeń wierszy w obiekcie.
W poniższym przykładzie pokazano, jak ustawić StrokeLineJoin właściwość:
PathF path = new PathF();
path.MoveTo(10, 10);
path.LineTo(110, 50);
path.LineTo(10, 110);
canvas.StrokeSize = 20;
canvas.StrokeColor = Colors.Blue;
canvas.StrokeLineJoin = LineJoin.Round;
canvas.DrawPath(path);
W tym przykładzie niebieski PathF obiekt zaokrąglił sprzężenia na wierzchołkach:
Wycinek obiektów
Obiekty graficzne rysowane do obiektu ICanvas można przycinać przed rysunkiem przy użyciu następujących metod:
- ClipPath wycina obiekt tak, aby widoczny był tylko obszar znajdujący się w regionie PathF obiektu.
- ClipRectangle wycinek obiektu tak, aby tylko obszar znajdujący się w regionie prostokąta był widoczny. Prostokąt można określić przy użyciu
float
argumentów lub argumentu Rect lub RectF . - SubtractFromClip wycina obiekt tak, aby widoczny był tylko obszar znajdujący się poza regionem prostokąta. Prostokąt można określić przy użyciu
float
argumentów lub argumentu Rect lub RectF .
W poniższym przykładzie pokazano, jak za pomocą ClipPath metody wyciąć obraz:
using System.Reflection;
using IImage = Microsoft.Maui.Graphics.IImage;
using Microsoft.Maui.Graphics.Platform;
IImage image;
Assembly assembly = GetType().GetTypeInfo().Assembly;
using (Stream stream = assembly.GetManifestResourceStream("GraphicsViewDemos.Resources.Images.dotnet_bot.png"))
{
image = PlatformImage.FromStream(stream);
}
if (image != null)
{
PathF path = new PathF();
path.AppendCircle(100, 90, 80);
canvas.ClipPath(path); // Must be called before DrawImage
canvas.DrawImage(image, 10, 10, image.Width, image.Height);
}
W tym przykładzie obraz jest przycinany przy użyciu PathF obiektu, który definiuje okrąg wyśrodkowany na (100 90) z promieniem 80. Wynikiem jest to, że widoczna jest tylko część obrazu w okręgu:
Ważne
Metoda ClipPath ma przeciążenie, które umożliwia WindingMode określenie parametru , który ustawia algorytm wypełnienia używany podczas wycinania. Aby uzyskać więcej informacji, zobacz Tryby uzwojenia.
W poniższym przykładzie pokazano, jak za pomocą SubtractFromClip metody wyciąć obraz:
using System.Reflection;
using IImage = Microsoft.Maui.Graphics.IImage;
using Microsoft.Maui.Graphics.Platform;
IImage image;
Assembly assembly = GetType().GetTypeInfo().Assembly;
using (Stream stream = assembly.GetManifestResourceStream("GraphicsViewDemos.Resources.Images.dotnet_bot.png"))
{
image = PlatformImage.FromStream(stream);
}
if (image != null)
{
canvas.SubtractFromClip(60, 60, 90, 90);
canvas.DrawImage(image, 10, 10, image.Width, image.Height);
}
W tym przykładzie obszar zdefiniowany przez prostokąt określony przez argumenty dostarczone do SubtractFromClip metody jest przycięty z obrazu. Wynikiem jest to, że widoczne są tylko części obrazu poza prostokątem: