Добро пожаловать на мой блог

The world is yours

GDI+NET

автор: admin | Октябрь 14, 2010 | Раздел: Жизнь

1.Обзор пространства имен GDI+.

2.Утилитарные типы GDI+.

3.Класс Graphics.

4.Обработка события Paint.

System. Drawing

/////////////////////////////

Это центральное пространство имен GDI+, определяющее

многочисленные типы для базовой визуализации (шрифты, перья, базовые

кисти и т.п.), а также “всемогущий” тип Graphics.

System.Drawing.Drawing2D

/////////////////////////////

Это пространство имен представляет типы, используемые для более

развитой функциональности двухмерной векторной графики (например,

градиентные кисти, концы перьев, геометрические трансформации и т.п.).

System.Drawing. Imaging

/////////////////////////////

Это пространство имен определяет типы, позволяющие

манипулировать графическими образами (например, изменять палитры, извлекать

метаданные изображений, манипулировать метафайлами и т.п.).

System.Drawing.Printing

/////////////////////////////

Это пространство имен определяет типы, позволяющие

визуализировать образы на печатной странице, взаимодействовать с

принтером и форматировать общий вид задания печати.

System.DrawingText

/////////////////////////////

Это пространство имен позволяет манипулировать коллекциями шрифтов.

Класс Graphics представляющий поверхность формы, или другого элемента управления, а также инструменты которые позволяют отображать текст, изображения и другие геом.формы, не имеет открытых конструкторов.

Способы получение объектов Graphics:

1.Обработка события Paint(Определение метода onPaint).

protected override void OnPaint(PaintEventArgs e)

{

Graphics g = e.Graphics;

g.DrawString(“LOGAN”, Font, Brushes.Red, 0, 0);

}

2.Обработка события Paint  С помощью делегатов, Paint Event handler.

Graphics g = e.Graphics;

g.DrawString(“LOGAN”, Font, Brushes.Red, this.ClientSize.Height-200, this.ClientSize.Width-200);

3.Вне обработчика Paint (С помощью статического метода From hwnd)

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

List<Point> my = new List<Point>();

//protected override void OnPaint(PaintEventArgs e)

//{

//    Graphics g = e.Graphics;

//    g.DrawString(“LOGAN”, Font, Brushes.Red, 0, 0);

//}

public Form1()

{

InitializeComponent();

}

private void Form1_Paint(object sender, PaintEventArgs e)

{

//    Graphics g = e.Graphics;

//    g.DrawString(“LOGAN”, Font, Brushes.Red, this.ClientSize.Height-200, this.ClientSize.Width-200);

Graphics g = Graphics.FromHwnd(this.Handle);

foreach (Point a in my)

g.DrawEllipse(Pens.Black, new Rectangle(a.X – 50, a.Y – 50, 100, 100));

}

private void Form1_MouseClick(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{

Point p = new Point(e.X,e.Y) ;

my.Add(p);

Graphics g = Graphics.FromHwnd(this.Handle);

g.DrawEllipse(Pens.Black, new Rectangle(p.X – 50, p.Y – 50, 100, 100));

//g.DrawEllipse(Pens.Black, new Rectangle(e.X-50, e.Y-50, 100, 100));

}

}

}

}

4. Вне обработчика Paint(С помощью метода Create Graphics.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

private int x, y;

public Form1()

{

InitializeComponent();

}

private void Form1_Paint(object sender, PaintEventArgs e)

{

Graphics g = e.Graphics;

g.DrawString(“LOGAN”,Font,Brushes.Black,x,y);

}

private void timer1_Tick(object sender, EventArgs e)

{

x++;

y++;

Invalidate();//Недействительная клиентская область

Update();//Недействительная клиентская область

}

}

}

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void Form1_Paint(object sender, PaintEventArgs e)

{

this.BackColor = Color.FromArgb(200, 255, 93);

e.Graphics.Clear(Color.GhostWhite);

this.BackColor = Color.FromArgb(200, 105, 4);

e.Graphics.Clear(Color.GhostWhite);

}

private void timer1_Tick(object sender, EventArgs e)

{

ResizeRedraw = true;

Invalidate();

}

}

}

private void Form1_Paint(object sender, PaintEventArgs e)

{

Graphics g = e.Graphics;

Font f = new Font(this.Font, FontStyle.Italic);

g.DrawString(“Hello mister LOGAN”,f, Brushes.Red, 0, 0);

}

Graphics g = e.Graphics;

// Font f = new Font(this.Font, FontStyle.Italic);

Font f = new Font(“Arial”, 72);

g.DrawString(“Hello mister LOGAN”,f, Brushes.Red, 0, 0);

ResizeRedraw = true;

Graphics g = e.Graphics;

Font f = new Font(“Arial”, 72);

StringFormat sf=new StringFormat();

sf.Alignment=StringAlignment.Center;

sf.LineAlignment=StringAlignment.Center;

g.DrawString(“Hello mister LOGAN”, f, Brushes.Red, (ClientSize.Width / 2), (ClientSize.Height / 2),sf);

—————————————

Graphics g = e.Graphics;

ResizeRedraw = true;

StringFormat sf = new StringFormat();

sf.Alignment=StringAlignment.Center;

sf.LineAlignment=StringAlignment.Center;

Font f = new Font(“Arial”, 72);

//g.DrawString(“Hello GDI+”, f, Brushes.Red, (ClientSize.Width / 2), (ClientSize.Height / 2), sf);

//  g.DrawString(“Hello GDI+”, this.Font, Brushes.Red, 0, 0);

SizeF ss = g.MeasureString(“Hello GDI+”, f);

float k = (ClientSize.Width) / (ss.Width);

Font f2 = new Font(“Arial”, k * f.SizeInPoints, f.Style);

//            g.DrawString(“Hello GDI+”, f, Brushes.Red, (ss.Width / 2), (ss.Height / 2), sf);

g.DrawString(“Hello GDI+”, f2, Brushes.Red, (ClientSize.Width / 2), (ClientSize.Height / 2), sf);

TextureBrush t = new TextureBrush(Image.FromFile(@”asd.jpg”));

Graphics g = e.Graphics;

ResizeRedraw = true;

HatchBrush hb = new HatchBrush(HatchStyle.HorizontalBrick,Color.Aqua);

t.RotateTransform(45);

g.FillRectangle(t, new Rectangle(0, 0, 500, 500));

}

private void Form1_Paint(object sender, PaintEventArgs e)

{

LinearGradientBrush gb = new LinearGradientBrush(new Point(0,100), new Point(100,200), Color.Red, Color.RoyalBlue);

Graphics g = e.Graphics;

ResizeRedraw = true;

HatchBrush hb = new HatchBrush(HatchStyle.HorizontalBrick,Color.Aqua);

g.FillRectangle(gb, new Rectangle(0, 0, 500, 500));

}

Point[] p={new Point(10,100),new Point(10,60),new Point(100,60)};

Color[] asd={Color.Red,Color.Gainsboro,Color.Gold};

PathGradientBrush gb = new PathGradientBrush(p,WrapMode.TileFlipXY);

gb.SurroundColors = asd;

Graphics g = e.Graphics;

ResizeRedraw = true;

HatchBrush hb = new HatchBrush(HatchStyle.HorizontalBrick,Color.Aqua);

g.FillRectangle(gb, new Rectangle(0, 0, 1000, 1000));

Point[] p={new Point(0,100),new Point(0,60),new Point(100,60)};

Point[] p2= { new Point(20, 100), new Point(10, 60), new Point(20,60) };

Color[] asd={Color.Red,Color.Gainsboro,Color.Gold};

PathGradientBrush gb = new PathGradientBrush(p,WrapMode.TileFlipXY);

PathGradientBrush gb2 = new PathGradientBrush(p2, WrapMode.TileFlipXY);

gb.SurroundColors = asd;

Graphics g = e.Graphics;

ResizeRedraw = true;

HatchBrush hb = new HatchBrush(HatchStyle.HorizontalBrick,Color.Aqua);

g.FillRectangle(gb, new Rectangle(0, 0, 1000, 1000));

g.FillRectangle(gb2, new Rectangle(0, 0, 1000, 1000));

Преобразование графических объектов и координат

  1. Ручное преобразование – свойства DpiX и DpiY.

X=x*Dpix/25.4 – миллиметры.

Y=y*Dpiy/25.4 – миллиметры

2.Автоматическая установка едениц измерения и масшатбирования.

GraphicsUnit PageUnit – указывает какими единицами будут пользоваться все функции для рисования.

Например:

g.PageUnit=GraphicsUnit.Inch;

3. PageScale – масшабирует еденицы.

Например PageScale=10 – тогда еденица измерения 10 дюймов.

Получение размеров клиентской области.

1.ClientSize – возвращает в пикселях.

2.VisibleClipBounds – в которых я установил в PageUnit.

3.Transform Points();

RotateTransform – поворачивает систему координат.

TranslateTransform – смещает систему координат

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

  1. FromFile(…);
  2. FromHbitmap(…);

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Drawing.Drawing2D;

using System.Drawing.Imaging;

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

ResizeRedraw = true;

}

private void Form1_Paint(object sender, PaintEventArgs e)

{

/*Загрузка изображения*/

//Graphics g = e.Graphics;

//Image Img = Image.FromFile(@”pic1.bmp”);

//g.DrawImage(Img,0,0);

/*————————————–*/

/*Загрузка изображения по Центру*/

//Graphics g = e.Graphics;

//Image Img = Image.FromFile(@”pic1.bmp”);

//g.DrawImage(Img,(ClientSize.Height/2)-Img.Height/2,(ClientSize.Width/2)-Img.Width/2);

/*————————————–*/

/**/

//Graphics g = e.Graphics;

//Image Img = Image.FromFile(@”pic1.bmp”);

//g.DrawImage(Img, (ClientSize.Height / 2) , (ClientSize.Width / 2),Img.Width,-Img.Height);

//g.DrawImage(Img, (ClientSize.Height / 2), (ClientSize.Width / 2), Img.Width, Img.Height);

//g.DrawImage(Img, (ClientSize.Height / 2), (ClientSize.Width / 2), -Img.Width, Img.Height);

//g.DrawImage(Img, (ClientSize.Height / 2), (ClientSize.Width / 2), -Img.Width, -Img.Height);

//Graphics g = e.Graphics;

//Image Img = Image.FromFile(@”pic1.bmp”);

//Rectangle r = new Rectangle(0, 0, ClientSize.Width, ClientSize.Height);

//g.DrawImage(Img,r);

//Graphics g = e.Graphics;

//Image Img = Image.FromFile(@”pic1.bmp”);

//Rectangle r = new Rectangle(0, 0, 100, 100);

// Rectangle r2 = new Rectangle(20, 20, 20, 45);

//g.DrawImage(Img,r,r2,GraphicsUnit.Pixel);

//Graphics g = e.Graphics;

//Image Img = Image.FromFile(@”pic1.bmp”);

//Point[] p = {new Point(40,20),new Point (250,40),new Point(100,100)};

//Rectangle r = new Rectangle(0, 0, Img.Width, Img.Height);

//g.DrawImage(Img, p, r, GraphicsUnit.Pixel);

/*—————————-*/

//прозрачность

//Image Img2 = Image.FromFile(@”pic2.bmp”);

//Image Img = Image.FromFile(@”pic1.bmp”);

//Graphics g = e.Graphics;

//Graphics g2 = Graphics.FromImage(Img);

//ImageAttributes ia = new ImageAttributes();

//ColorMatrix cm = new ColorMatrix();

//cm.Matrix33 = 0.5f;

//ia.SetColorMatrix(cm);

//g2.DrawImage(Img2, new Rectangle(0, 0, Img2.Width, Img2.Height), 0, 0, Img2.Width, Img2.Height, GraphicsUnit.Pixel, ia);

//g.DrawImage(Img, 0, 0, ClientSize.Width, ClientSize.Height);

/*——————————-*/

//Graphics g = e.Graphics;

//Graphics g2 = e.Graphics;

//Font f = new Font(“Times new Roman”, 72);

//SizeF ss = g.MeasureString(“Hello GDI+”, f);

//Bitmap b = new Bitmap((int)ss.Width, (int)ss.Height);

//g2 = Graphics.FromImage(b);

//g2.Clear(Color.White);

//g2.DrawString(“Hello mister LOGAN”, f, Brushes.Red, 0, 0);

//g.DrawImage(b,0,0);

Graphics g=new Graphics;

g.CopyFromScreen();

еще есть класс screen

копи скрин на битмап

BringToFront,

}

}

}

Кривые, контуры, отсечения.

Контуры – независимый набор точек.

Метафайлы.

Расширения метафайлов .wmf , .emf , .emf+

Пространство: System.Drawing.Imaging

Метафайлы создаются 3-мя способами:

1.FromFile.

2.DrawImageFromScaled.

Создание с помощью конструкторов:

Graphics g = this.CreateGraphics();

IntPtr hdc = g.GetHdc();

Metafile m = new Metafile(“MyMetaFile.emf”, hdc);

g.ReleaseHdc();

Graphics g2 = Graphics.FromImage(m);

g2.DrawString(“Metafile”, Font, Brushes.Red, new Point(0, 0));

g2.FillEllipse(Brushes.Green,new Rectangle(new Point (0,0),new Size(50,50)));

g2.Dispose();

}

//Graphics g = this.CreateGraphics();

//IntPtr hdc = g.GetHdc();

//Metafile m = new Metafile(“MyMetaFile.emf”, hdc);

//g.ReleaseHdc();

//Graphics g2 = Graphics.FromImage(m);

//g2.DrawString(“Metafile”, Font, Brushes.Red, new Point(0, 0));

//g2.FillEllipse(Brushes.Green, new Rectangle(new Point(0, 0), new Size(50, 50)));

//g2.Dispose();

}

private void Form1_Paint(object sender, PaintEventArgs e)

{

//Graphics g = this.CreateGraphics();

//Metafile m = new Metafile(“MyMetaFile.emf”);

//g.DrawImage(m, new Point(0, 0));

Мой блог находят по следующим фразам

22 отзыва(-ов) »

  1. [...] Colormatrix .Net class прозрачность изображений [...]

  2. [...] bitmap to emf c# [...]

  3. [...] Graphics draw gdi 2010 [...]

  4. [...] контуры в gdi [...]

  5. [...] drawimage .net [...]

  6. [...] Graphics.DrawString MeasureString PageUnit c# [...]

  7. [...] using System.Drawing.Drawing2D; [...]

  8. [...] measurestring C# [...]

  9. [...] gdi+ center drawstring [...]

  10. [...] graphics g = с++ [...]

  11. [...] graphics C# drawstring [...]

  12. [...] черный контур drawstring c# [...]

  13. [...] пространство имён GDI+ [...]

  14. [...] color.aqua = color.fromargb(i) [...]

  15. [...] drawstring c# прозрачность [...]

  16. [...] c# прозрачность TextureBrush [...]

  17. [...] gdi+ drawstring three point [...]

  18. [...] пространство имен gdi+ в с# [...]

  19. [...] добавить объект wpf в поверхность рисования gdi+ [...]

  20. [...] изменить PageScale C# [...]

  21. [...] c# texturebrush [...]

  22. [...] c#+graphics+pagescale+font В закладки! var a2a_config = a2a_config || {}; a2a_localize = { Share: "Отправить другу", Save: "Сохранить", Subscribe: "Подписаться", Email: "E-mail", Bookmark: "В закладки!", ShowAll: "Показать все", ShowLess: "Показать остальное", FindServices: "Найти сервис(ы)", FindAnyServiceToAddTo: "Найти сервис и добавить", PoweredBy: "Работает на ", ShareViaEmail: "Подписаться по e-mail", SubscribeViaEmail: "Подписаться по e-mail", BookmarkInYourBrowser: "Добавить в закладки", BookmarkInstructions: "Нажмите Ctrl+В или ⌘+D чтобы добавить страницу в закладки", AddToYourFavorites: "Добавить в Избранное", SendFromWebOrProgram: "Отправить через e-mail сервис", EmailProgram: "E-mail сервисы" }; a2a_config.linkname="Oracle"; a2a_config.linkurl="http://logan.progryz.ru/2010/10/oracle/"; a2a_config.hide_embeds=0; [...]

Оставить отзыв