Кратко съдържание


Пакетът System.Drawing и GDI+



страница21/33
Дата23.07.2016
Размер10.53 Mb.
#1889
1   ...   17   18   19   20   21   22   23   24   ...   33

Пакетът System.Drawing и GDI+


Пакетът System.Drawing осигурява достъп до GDI+ функциите на Windows:

  • повърхности за чертане

  • работа с графика и графични трансформации

  • изчертаване на геометрични фигури

  • работа с изображения

  • работа с текст и шрифтове

  • печатане на принтер

Той се състои от няколко пространства:

  • System.Drawing – предоставя основни класове като повърхности, моливи, четки, класове за изобразяване на текст.

  • System.Drawing.Imaging – предоставя класове за работа с изобра­же­ния, картинки и икони, класове за записване в различни файлови формати и за преоразмеряване на изображения.

  • System.Drawing.Drawing2D – предоставя класове за графични транс­формации – бленди, матрици и др.

  • System.Drawing.Text – предоставя класове за достъп до шрифто­вете на графичната среда.

  • System.Drawing.Printing – предоставя класове за печатане на принтер и системни диалогови кутии за печатане.

Класът Graphics


Класът System.Drawing.Graphics предоставя абстрактна повърхност за чертане. Такава повърхност може да бъде както част от контрола на екрана, така и част от страница на принтер или друго устройство.

Най-често чертането се извършва в обработчика на събитието Paint. В него при необходимост се преизчертава графичния облик на контролата. Параметърът PaintEventArgs, който се подава, съдържа Graphics обекта. Graphics обект може да се създава чрез Control.CreateGraphics(). Той задължително трябва да се освобождава чрез finally блок или с конс­трукцията using, защото е ценен ресурс.


Работа със System.Drawing – пример


Чрез настоящия пример ще илюстрираме работата с GDI+ чрез пакета System.Drawing – чертане на геометрични фигури с четки и моливи и изобразяване на текст със зададен шрифт.

Ето и стъпките за изграждане на нашето примерно приложение:



  1. Стартираме VS.NET и създаваме нов Windows Forms проект.

  2. Задаваме на главната форма име MainForm и подходящо заглавие, например "System.Drawing Demo". Променяме и името на файла от Form1.cs на MainForm.cs.

  3. Добавяме обработчик на събитието Paint, където изчертаваме гра­фично изображение:

private void MainForm_Paint(object sender,

System.Windows.Forms.PaintEventArgs e)

{

Graphics g = e.Graphics;



g.SmoothingMode = SmoothingMode.AntiAlias;
Brush brush = new SolidBrush(Color.Blue);

g.FillEllipse(brush, 50, 40, 350, 250);

brush.Dispose();
Pen pen = new Pen(Color.Red, 2);

g.DrawRectangle(pen, 40, 50, 200, 40);

pen.Dispose();
brush = new SolidBrush(Color.Yellow);

Font font = new Font("Arial", 14, FontStyle.Bold);

g.DrawString(".NET Framework", font, brush, 60, 60);

brush.Dispose();

font.Dispose();

}


В метода вземаме Graphics обекта на формата, създаваме подходящи четки, моливи и шрифтове. С тях изчертаваме запълнена елипса и право­ъгълник и в него изписваме текст. Всички GDI+ ресурси (четки, моливи и шрифтове) задължително се освобождават след използване.

  1. Приложението е готово и можем да го стартираме и тестваме:


Анимация със System.Drawing – пример


Настоящият пример илюстрира как със средствата на GDI+ чрез пакета System.Drawing може да се реализира плавна анимация на някакъв геометричен обект.

Ето и стъпките за изграждане на нашето примерно приложение:



  1. Стартираме VS.NET и създаваме нов Windows Forms проект.

  2. Задаваме на главната форма име MainForm и заглавие "System. Drawing Demo". Променяме и името на файла от Form1.cs на MainForm.cs.

  3. Добавяме променливи и константи за позицията на анимирания обект (елипса), стъпката на преместване и размерите на елипса­та:

    private int mPosX = 0;

    private int mPosY = 0;

    private int StepX = 1;

    private int StepY = 1;


    public const int ELLIPSE_SIZE_X = 70;

    public const int ELLIPSE_SIZE_Y = 40;



  4. Поставяме в главната форма една Timer компонента с име TimerAnimaiton и един PictureBox с име PictureBoxAnimatoin.

  5. Добавяме обработчик на събитието Paint на PictureBox контрола­та. В него изчертаваме движещия се обект на позицията, в която се намира в момента:

    private void PictureBoxAnimation_Paint(object sender,

    System.Windows.Forms.PaintEventArgs e)

    {

    Graphics g = e.Graphics;



    g.SmoothingMode = SmoothingMode.AntiAlias;
    Brush brush = new SolidBrush(Color.Blue);

    g.FillEllipse(brush, mPosX, mPosY,

    ELLIPSE_SIZE_X, ELLIPSE_SIZE_Y);

    brush.Dispose();


    brush = new SolidBrush(Color.Yellow);

    Font font = new Font("Arial", 14, FontStyle.Bold);

    g.DrawString(".NET", font, brush, mPosX+10, mPosY+10);

    brush.Dispose();

    font.Dispose();

    }


  6. Задаваме на свойствата Enabled и Interval на Timer компонентата съответно стойности true и 10. Така тя ще генерира събитие на всеки 10 милисекунди.

  7. Добавяме обработчик на събитието Elapsed на Timer компонентата. В него променяме координатите на движещия се обект и пречерта­ва­ме PictureBox контролата:

    private void TimerAnimation_Elapsed(object sender,

    System.Timers.ElapsedEventArgs e)

    {

    mPosX += StepX;



    if ((mPosX >= PictureBoxAnimation.Width - ELLIPSE_SIZE_X - 3)

    || (mPosX <= 0))

    {

    StepX = -StepX;



    }
    mPosY += StepY;

    if ((mPosY >= PictureBoxAnimation.Height - ELLIPSE_SIZE_Y - 3)

    || (mPosY <= 0))

    {

    StepY = -StepY;



    }
    PictureBoxAnimation.Refresh();

    }


  8. Приложението е готово и можем да го стартираме и тестваме:

В примера сме използвали PictureBox контрола, защото тя не чертае нищо в своя Paint метод, който се извиква преди всяко пречертаване. Ако бяхме използвали Panel или друга контрола, щеше да се получи трепкане.

За професионална анимация се използва DirectX технологията, която използва ресурсите на графичната карта много по-ефективно и натоварва централния процесор много по-малко. Като цяло за по-сложни прило­жения (например игри) използваният в този пример подход е грешен!




Сподели с приятели:
1   ...   17   18   19   20   21   22   23   24   ...   33




©obuch.info 2024
отнасят до администрацията

    Начална страница