Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
GDI+ erbjuder vågräta, lodräta och diagonala linjära toningar. Som standard ändras färgen i en linjär toning på ett enhetligt sätt. Du kan dock anpassa en linjär toning så att färgen ändras på ett icke-enhetligt sätt.
Anmärkning
Exemplen i den här artikeln är metoder som anropas från en kontrolls Paint händelsehanterare.
I följande exempel fylls en linje, en ellips och en rektangel med en vågrät linjär färgövergångspensel.
Konstruktorn LinearGradientBrush tar emot fyra argument: två punkter och två färger. Den första punkten (0, 10) är associerad med den första färgen (röd) och den andra punkten (200, 10) är associerad med den andra färgen (blå). Som förväntat ändras linjen från (0, 10) till (200, 10) gradvis från rött till blått.
10-talet i punkterna (0, 10) och (200, 10) är inte viktiga. Det viktiga är att de två punkterna har samma andra koordinat – linjen som förbinder dem är vågrät. Ellipsen och rektangeln ändras också gradvis från rött till blått eftersom den vågräta koordinaten går från 0 till 200.
Följande bild visar linjen, ellipsen och rektangeln. Observera att färgtoningen upprepar sig när den vågräta koordinaten ökar efter 200.
Så här använder du vågräta linjära toningar
Skicka in den ogenomskinliga röda respektive ogenomskinliga blå som det tredje respektive fjärde argumentet.
public void UseHorizontalLinearGradients(PaintEventArgs e) { LinearGradientBrush linGrBrush = new LinearGradientBrush( new Point(0, 10), new Point(200, 10), Color.FromArgb(255, 255, 0, 0), // Opaque red Color.FromArgb(255, 0, 0, 255)); // Opaque blue Pen pen = new Pen(linGrBrush); e.Graphics.DrawLine(pen, 0, 10, 200, 10); e.Graphics.FillEllipse(linGrBrush, 0, 30, 200, 100); e.Graphics.FillRectangle(linGrBrush, 0, 155, 500, 30); }Dim linGrBrush As New LinearGradientBrush( _ New Point(0, 10), _ New Point(200, 10), _ Color.FromArgb(255, 255, 0, 0), _ Color.FromArgb(255, 0, 0, 255)) Dim pen As New Pen(linGrBrush) e.Graphics.DrawLine(pen, 0, 10, 200, 10) e.Graphics.FillEllipse(linGrBrush, 0, 30, 200, 100) e.Graphics.FillRectangle(linGrBrush, 0, 155, 500, 30)
I föregående exempel ändras färgkomponenterna linjärt när du går från en vågrät koordinat på 0 till en vågrät koordinat på 200. Till exempel har en punkt vars första koordinat är halvvägs mellan 0 och 200 en blå komponent som är halvvägs mellan 0 och 255.
Med GDI+ kan du justera hur en färg varierar från en kant av en toning till en annan. Anta att du vill skapa en gradientpensel som ändras från svart till röd enligt följande tabell.
| Vågrät koordinat | RGB-komponenter |
|---|---|
| 0 | (0, 0, 0) |
| 40 | (128, 0, 0) |
| 200 | (255, 0, 0) |
Observera att den röda komponenten har halv intensitet när den vågräta koordinaten bara är 20 procent av vägen från 0 till 200.
I följande exempel anges egenskapen LinearGradientBrush.Blend för att associera tre relativa intensiteter med tre relativa positioner. Precis som i föregående tabell associeras en relativ intensitet på 0,5 med en relativ position på 0,2. Koden fyller en ellips och en rektangel med gradientpenseln.
Följande bild visar den resulterande ellipsen och rektangeln.
Anpassa linjära gradienter
Skicka in ogenomskinlig svart och ogenomskinlig röd som det tredje respektive fjärde argumentet.
public void CustomizeLinearGradients(PaintEventArgs e) { LinearGradientBrush linGrBrush = new LinearGradientBrush( new Point(0, 10), new Point(200, 10), Color.FromArgb(255, 0, 0, 0), // Opaque black Color.FromArgb(255, 255, 0, 0)); // Opaque red float[] relativeIntensities = { 0.0f, 0.5f, 1.0f }; float[] relativePositions = { 0.0f, 0.2f, 1.0f }; //Create a Blend object and assign it to linGrBrush. Blend blend = new Blend(); blend.Factors = relativeIntensities; blend.Positions = relativePositions; linGrBrush.Blend = blend; e.Graphics.FillEllipse(linGrBrush, 0, 30, 200, 100); e.Graphics.FillRectangle(linGrBrush, 0, 155, 500, 30); }Dim linGrBrush As New LinearGradientBrush( _ New Point(0, 10), _ New Point(200, 10), _ Color.FromArgb(255, 0, 0, 0), _ Color.FromArgb(255, 255, 0, 0)) Dim relativeIntensities As Single() = {0.0F, 0.5F, 1.0F} Dim relativePositions As Single() = {0.0F, 0.2F, 1.0F} 'Create a Blend object and assign it to linGrBrush. Dim blend As New Blend() blend.Factors = relativeIntensities blend.Positions = relativePositions linGrBrush.Blend = blend e.Graphics.FillEllipse(linGrBrush, 0, 30, 200, 100) e.Graphics.FillRectangle(linGrBrush, 0, 155, 500, 30)
Toningarna i föregående exempel har varit vågräta. Det innebär att färgen ändras gradvis när du rör dig längs en vågrät linje. Du kan också definiera lodräta toningar och diagonala toningar.
I följande exempel skickas punkterna (0, 0) och (200, 100) till en LinearGradientBrush konstruktor. Färgen blå är associerad med (0, 0) och färgen grön är associerad med (200, 100). En linje (med pennbredd 10) och en ellips fylls med den linjära gradientpenseln.
Följande bild visar linjen och ellipsen. Observera att färgen i ellipsen ändras gradvis när du rör dig längs alla linjer som är parallella med linjen som passerar genom (0, 0) och (200, 100).
Skapa diagonala linjära toningar
Skicka in den ogenomskinliga blå och ogenomskinliga gröna som det tredje respektive fjärde argumentet.
public void CreateDiagonalLinearGradients(PaintEventArgs e) { LinearGradientBrush linGrBrush = new LinearGradientBrush( new Point(0, 0), new Point(200, 100), Color.FromArgb(255, 0, 0, 255), // opaque blue Color.FromArgb(255, 0, 255, 0)); // opaque green Pen pen = new Pen(linGrBrush, 10); e.Graphics.DrawLine(pen, 0, 0, 600, 300); e.Graphics.FillEllipse(linGrBrush, 10, 100, 200, 100); }Dim linGrBrush As New LinearGradientBrush( _ New Point(0, 0), _ New Point(200, 100), _ Color.FromArgb(255, 0, 0, 255), _ Color.FromArgb(255, 0, 255, 0)) ' opaque blue ' opaque green Dim pen As New Pen(linGrBrush, 10) e.Graphics.DrawLine(pen, 0, 0, 600, 300) e.Graphics.FillEllipse(linGrBrush, 10, 100, 200, 100)
Se även
.NET Desktop feedback