Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C# для профСссионалов. Π’ΠΎΠΌ IIΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 72

Автор Π‘ΠΈΠΌΠΎΠ½ Робинсон

ΠšΠΈΡΡ‚ΠΈ

GDI+ ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² кистСй, ΠΌΡ‹ объясним ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π½Π°Ρ‚ΡŒ ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°Ρ…. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ кисти прСдставлСн экзСмпляром класса, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΈΠ· System.Drawing.Brush (этот класс являСтся абстрактным, поэтому нСльзя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Brush ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов). ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ°Ρ ΠΊΠΈΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° ΡΠΏΠ»ΠΎΡˆΠ½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ. Π­Ρ‚ΠΎΡ‚ Π²ΠΈΠ΄ кисти прСдставлСн экзСмпляром класса System.Drawing.SolidBrush, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Brush solidBeigeBrush = new SolidBrush(Color.Beige);

Brush solidFunnyOrangyBrownBrush = new SolidBrush(Color.FromArgb(255, 155, 100)

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ, Ссли ΠΊΠΈΡΡ‚ΡŒ являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΈΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ просто с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса System.Drawing.Brushes. Brushes являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Ρ‚Π΅Ρ… классов, экзСмпляры ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ (ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ конструктор, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π΄Π°Ρ‚ΡŒ возмоТности это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ). Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ число статичСских свойств Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΈΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π°. Brushes ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊ:

Brush solidAzureBrush = Brushes.Azure;

Brush solidChocolateBrush = Brushes.Chocolate;

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ слоТности прСдставляСт ΡˆΡ‚Ρ€ΠΈΡ…ΠΎΠ²Π°Ρ ΠΊΠΈΡΡ‚ΡŒ, которая заполняСт ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, рисуя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ шаблон-ΡƒΠ·ΠΎΡ€. Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ кисти находится Π² пространствС ΠΈΠΌΠ΅Π½ Drawing2D, прСдставлСнном классом System.Drawing.Drawing2D.HatchBrush. Класс Brushes Π½Π΅ смоТСт ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² случаС ΡˆΡ‚Ρ€ΠΈΡ…ΠΎΠ²ΠΎΠΉ кисти, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π½ΠΈΡ… явно, задавая ΡΡ‚ΠΈΠ»ΡŒ ΡˆΡ‚Ρ€ΠΈΡ…ΠΎΠ²ΠΊΠΈ ΠΈ Π΄Π²Π° Ρ†Π²Π΅Ρ‚Π° β€” Ρ†Π²Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π° ΠΈ Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° (Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π°, Π² Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚). Π‘Ρ‚ΠΈΠ»ΡŒ ΡˆΡ‚Ρ€ΠΈΡ…ΠΎΠ²ΠΊΠΈ Π·Π°Π΄Π°ΡŽΡ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ пСрСчислСния System.Drawing.Drawing2D.HatchStyle. БущСствуСт большоС число доступных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ HatchStyle, поэтому ΠΏΡ€ΠΎΡ‰Π΅ всСго ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ MSDN для получСния ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ списка. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌΠΈ стилями, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ForwardDiagonal, Cross, DiagonalCross, SmallConfetti ΠΈ ZigZag. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ создания ΡˆΡ‚Ρ€ΠΈΡ…ΠΎΠ²ΠΎΠΉ кисти

Brush crossBrush = new HatchBrush(HatchStyle.Cross, Color.Azure);

// Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ для CrosstBrush Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ

Brush brickBrush = new HatchBrush(HatchStyle.DiagonalBrick, Color.DarkGoldenrod.Color.Cyan);

Π‘ΠΏΠ»ΠΎΡˆΠ½Ρ‹Π΅ ΠΈ ΡˆΡ‚Ρ€ΠΈΡ…ΠΎΠ²Ρ‹Π΅ кисти β€” СдинствСнныС кисти, доступныС Π² GDI. GDI+ добавляСт ΠΏΠ°Ρ€Ρƒ Π½ΠΎΠ²Ρ‹Ρ… стилСй кисти:

β–‘ ΠšΠΈΡΡ‚ΡŒ System.Drawing.Drawing2D.LinearGradientBrush заполняСт ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ измСняСтся Π½Π° экранС.

β–‘ ΠšΠΈΡΡ‚ΡŒ System.Drawing.Drawmg2D.PathGradientBrush дСйствуСт Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Π½ΠΎ Π² этом случаС Ρ†Π²Π΅Ρ‚ мСняСтся вдоль ΠΊΡ€ΠΈΠ²ΠΎΠΉ Π² Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ области. ΠœΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ здСсь эти кисти. ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π΅ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ интСрСсныС эффСкты ΠΏΡ€ΠΈ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎΠΌ использовании. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Bezier ΠΈΠ· Π³Π»Π°Π²Ρ‹ 9 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΈΡΡ‚ΡŒ с Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠΌ для Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π½ΠΈΡ Ρ„ΠΎΠ½Π° ΠΎΠΊΠ½Π°.

ΠŸΠ΅Ρ€ΡŒΡ

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ кистСй ΠΏΠ΅Ρ€ΡŒΡ прСдставлСны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ классов β€” System.Drawing.Pen. ΠŸΠ΅Ρ€ΠΎ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ являСтся Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ с ΡŽΠΆΠ½Ρ‹ΠΌ, Ρ‡Π΅ΠΌ Ρ‡ΠΈΡΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Ρƒ Π»ΠΈΠ½ΠΈΠΉ (ΡˆΠΈΡ€ΠΈΠ½Ρƒ Π² пиксСлях), Π° для ΡˆΠΈΡ€ΠΎΠΊΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ,β€” ΠΊΠ°ΠΊ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π΅. ΠŸΠ΅Ρ€ΡŒΡ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ряд Π΄Ρ€ΡƒΠ³ΠΈΡ… свойств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ нашСго рассмотрСния, Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π²ΡˆΠ΅Π΅ΡΡ Ρ€Π°Π½Π΅Π΅ свойство Alignment, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅, Π³Π΄Π΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ нарисована линия, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊΡƒΡŽ Ρ„ΠΈΠ³ΡƒΡ€Ρƒ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ½Ρ†Π΅ Π»ΠΈΠ½ΠΈΠΈ (Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ ΠΎΠΊΡ€ΡƒΠ³Π»ΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ).

ΠžΠ±Π»Π°ΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ толстой Π»ΠΈΠ½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π° ΡΠΏΠ»ΠΎΡˆΠ½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π° ΠΈΠ»ΠΈ кисти. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, экзСмпляр Pen ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ссылку Π½Π° экзСмпляр Brush. Π­Ρ‚ΠΎ достаточно ΠΌΠΎΡ‰Π½ΠΎΠ΅ срСдство, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Π΅Π³ΠΎ содСйствии ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ½ΠΈΠΈ, ΠΎΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡˆΡ‚Ρ€ΠΈΡ…ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ затСнСния. БущСствуСт Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… способа, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ экзСмпляры Pen. МоТно Π·Π°Π΄Π°Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚ ΠΈΠ»ΠΈ ΠΊΠΈΡΡ‚ΡŒ, ΠΎΠ±Π° эти конструктора Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€ΠΎ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ Π² ΠΎΠ΄ΠΈΠ½ пиксСль. МоТно Ρ‚Π°ΠΊΠΆΠ΅ Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Ρ†Π²Π΅Ρ‚Ρƒ ΠΈΠ»ΠΈ кисти Π·Π°Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° float, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΏΠ΅Ρ€Π° (Π½Π° Ρ‚ΠΎΡ‚ случай, Ссли для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Graphics, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ рисованиС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ нСстандартныС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ измСрСния, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΌΠΈΠ»Π»ΠΈΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈΠ»ΠΈ Π΄ΡŽΠΉΠΌΡ‹, ΠΈΠ»ΠΈ Π΄ΠΎΠ»ΠΈ дюймов). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€ΡŒΡ:

Brush brickBrush = new HatchBrush(HatchStyle.DiagonalBrick, Color.DarkGoldenrod, Color.Cyan);

Pen solidBluePen = new Pen(Color.FromArgb(0, 0, 255));

Pen solidWideBluePen = new Pen(Color.Blue, 4);

Pen brickPen = new Pen(BrickBrush);

Pen brickWidePen = new Pen(BrickBrush, 10);

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, для быстрого создания ΠΏΠ΅Ρ€ΡŒΠ΅Π² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс System.Drawing.Pens, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ классу Brushes содСрТит ряд Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΏΠ΅Ρ€ΡŒΠ΅Π². Π­Ρ‚ΠΈ ΠΏΠ΅Ρ€ΡŒΡ всС ΠΈΠΌΠ΅ΡŽΡ‚ ΡˆΠΈΡ€ΠΈΠ½Ρƒ Π² ΠΎΠ΄ΠΈΠ½ пиксСль ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ мноТСство ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°, Ρ‡Ρ‚ΠΎ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€ΡŒΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Pen SolidYellowPen = Pens.Yellow;

РисованиС Ρ„ΠΈΠ³ΡƒΡ€ ΠΈ Π»ΠΈΠ½ΠΈΠΉ

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ части Π³Π»Π°Π²Ρ‹ Π±Ρ‹Π»ΠΈ рассмотрСны Π±Π°Π·ΠΎΠ²Ρ‹Π΅ классы ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ для рисования ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΠΈΠ³ΡƒΡ€ ΠΈ Ρ‚.Π΄. Π½Π° экранС. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π΄ΠΈΠΌ ΠΎΠ±Π·ΠΎΡ€ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² рисования, прСдоставляСмых классом Graphics, ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ β€” ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ нСсколько кистСй ΠΈ ΠΏΠ΅Ρ€ΡŒΠ΅Π².

System.Drawing.Graphics ΠΈΠΌΠ΅Π΅Ρ‚ большоС число ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ, ΠΊΠΎΠ½Ρ‚ΡƒΡ€Ρ‹ Ρ„ΠΈΠ³ΡƒΡ€ ΠΈ ΡΠΏΠ»ΠΎΡˆΠ½Ρ‹Π΅ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹. Π˜Ρ… сущСствуСт слишком ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π° (см. Π½ΠΈΠΆΠ΅) прСдставляСт основныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Π΄Π°Π΅Ρ‚ прСдставлСниС ΠΎ мноТСствС Ρ„ΠΈΠ³ΡƒΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ.

ΠœΠ΅Ρ‚ΠΎΠ΄ Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π§Ρ‚ΠΎ рисуСт DrawLine ΠŸΠ΅Ρ€ΠΎ, Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ ΠΈ конСчная Ρ‚ΠΎΡ‡ΠΊΠΈ ΠžΠ΄ΠΈΠ½ΠΎΡ‡Π½Π°Ρ прямая линия DrawRectangle ΠŸΠ΅Ρ€ΠΎ, позиция ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠšΠΎΠ½Ρ‚ΡƒΡ€ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° DrawEllipse ΠŸΠ΅Ρ€ΠΎ, позиция ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠšΠΎΠ½Ρ‚ΡƒΡ€ эллипса FillRectangle ΠšΠΈΡΡ‚ΡŒ, позиция ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π—Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ FillEllipse ΠšΠΈΡΡ‚ΡŒ, позиция ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π—Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹ΠΉ эллипс DrawLines ΠŸΠ΅Ρ€ΠΎ, массив Ρ‚ΠΎΡ‡Π΅ΠΊ ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π»ΠΈΠ½ΠΈΠΉ, ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΡ… ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Π² массивС со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ DrawBezier ΠŸΠ΅Ρ€ΠΎ, 4 Ρ‚ΠΎΡ‡ΠΊΠΈ Гладкая кривая, ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π°Ρ Π΄Π²Π΅ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ проходящая Ρ‡Π΅Ρ€Π΅Π· Π΄Π²Π΅ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для управлСния Ρ„ΠΎΡ€ΠΌΠΎΠΉ ΠΊΡ€ΠΈΠ²ΠΎΠΉ DrawCurve ΠŸΠ΅Ρ€ΠΎ, массив Ρ‚ΠΎΡ‡Π΅ΠΊ Гладкая кривая, проходящая Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΎΡ‡ΠΊΠΈ DrawArc ΠŸΠ΅Ρ€ΠΎ, ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, Π΄Π²Π° ΡƒΠ³Π»Π° Π§Π°ΡΡ‚ΡŒ окруТности Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°, опрСдСлСнная ΡƒΠ³Π»Π°ΠΌΠΈ DrawClosedCurve ΠŸΠ΅Ρ€ΠΎ, массив Ρ‚ΠΎΡ‡Π΅ΠΊ ПодобСн DrawCurve, Π½ΠΎ рисуСт Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΡΠΌΡƒΡŽ линию для соСдинСния ΠΊΠΎΠ½Ρ†ΠΎΠ² ΠΊΡ€ΠΈΠ²ΠΎΠΉ DrawPie ΠŸΠ΅Ρ€ΠΎ, ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, Π΄Π²Π° ΡƒΠ³Π»Π° ΠšΠ»ΠΈΠ½ΠΎΠ²ΠΈΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° FillPie ΠšΠΈΡΡ‚ΡŒ, ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, Π΄Π²Π° ΡƒΠ³Π»Π° Π—Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π½Π°Ρ клиновидная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ΅ DrawPolygon ΠŸΠ΅Ρ€ΠΎ, массив Ρ‚ΠΎΡ‡Π΅ΠΊ ПодобСн DrawLines, Π½ΠΎ соСдиняСт Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΈ послСднюю Ρ‚ΠΎΡ‡ΠΊΠΈ для замыкания нарисованной Ρ„ΠΈΠ³ΡƒΡ€Ρ‹

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΌΡƒ рисования простых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², создадим ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дСмонстрируСт разновидности Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… эффСктов, создаваСмых с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ кистСй. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ называСтся ScrollMoreShapes ΠΈ являСтся ΠΏΠΎ сути пСрСсмотром ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ScrollShapes. Помимо ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΈ эллипса, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ»ΡΡ‚ΡƒΡŽ линию ΠΈ закрасим Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… кистСй. ΠœΡ‹ ΡƒΠΆΠ΅ объясняли ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ рисования, поэтому ΠΊΠΎΠ΄ прСдставлСн с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ коммСнтариями. ΠŸΠ΅Ρ€Π²ΠΎΠ΅: Π² связи с Π½ΠΎΠ²Ρ‹ΠΌΠΈ кистями, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ пространство ΠΈΠΌΠ΅Π½ System.Drawing.Drawing2D:

using System;

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ нСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ Π² классС Form1, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ мСстах, Π³Π΄Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ нарисованы Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠ΅Ρ€ΡŒΡ ΠΈ кисти:

private Rectangle rectangleBounds =

 new Rectangle(new Point(0, 0), new Size(200, 200));

private Rectangle ellipseBounds =

 new Rectangle(new Point(50, 200), new Size(200, 150));

private Pen BluePen = new Pen(Color.Blue, 3);

private Pen RedPen = new Pen(Color.Red, 2);

private Brush SolidAzureBrush = Brushes.Azure;

private Brush CrossBrush = new HatchBrush(HatchStyle.Cross, Color.Azure);

static private Brush BrickBrush =

 new HatchBrush(HatchStyle.DiagonalBrick, Color.DarkGoldenrod, Color.Cyan);

private Pen BrickWidePen = new Pen(BrickBrush, 10);