知识大全 GDI+编程的10个基本技巧
Posted 坐标系
篇首语:见强不怕,遇弱不欺。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 GDI+编程的10个基本技巧相关的知识,希望对你有一定的参考价值。
GDI+编程的10个基本技巧 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
创建绘图表面 创建绘图表面有两种常用的方法 下面设法得到PictureBox的绘图表面 private void Form _Load(object sender System EventArgs e) //得到pictureBox 的绘图表面 Graphics g = this pictureBox CreateGraphics(); private void pictureBox _Paint(object sender System Windows Forms PaintEventArgs e) //得到pictureBox 的绘图表面 Graphics g = e Graphics; 可以利用Graphics对象绘制出各种图形图案 控件的Paint事件和OnPaint方法都可以绘图都是好时机 在OnPaint方法里绘制图案一定从参数e里面得到Graphics属性 下面是两个例子 protected override void OnPaint(PaintEventArgs e) e Graphics Clear(Color White); float x y w h; x = this Left+ ; y = this Top+ ; w = this Width ; h = this Height ; Pen pen = new Pen(Color Red ); e Graphics DrawRectangle(pen x y w h); base OnPaint (e); private void PictureBoxII_Resize(object sender EventArgs e) this Invalidate(); private void button _Click(object sender System EventArgs e) this pictureBoxII CreateGraphics() FillEllipse( Brushes Blue ); 和文本有关的三个类 FontFamily——定义有着相似的基本设计但在形式上有某些差异的一组字样 无法继承此类 Font——定义特定的文本格式 包括字体 字号和字形属性 无法继承此类 StringFormat——封装文本布局信息(如对齐方式和行距) 显示操作(如省略号插入和国家标准 (National) 数字位替换)和 OpenType 功能 无法继承此类 下面的程序显示了一段文字 private void button _Click(object sender System EventArgs e) Graphics g = this pictureBoxII CreateGraphics(); g FillRectangle(Brushes White this pictureBoxII ClientRectangle); string s = aaaaaaaaaaaaaaaaaaaaaaaaaa ; FontFamily fm = new FontFamily( ËÎÌå ); Font f = new Font(fm FontStyle Bold GraphicsUnit Point); RectangleF rectF = new RectangleF( ); StringFormat sf = new StringFormat(); SolidBrush sbrush = new SolidBrush(Color FromArgb( )); sf LineAlignment = StringAlignment Center; sf FormatFlags = StringFormatFlags DirectionVertical; g DrawString(s f sbrush rectF sf); GDI+的路径——GraphicsPath类 GraphicsPath类提供了一系列属性和方法 利用它可以获取路径上的关键点 可以添加直线段 圆等几何元素 可以获得包围矩形 进行拾取测试 这些功能都怎么用 要仔细看一下 private void button _Click(object sender System EventArgs e) //绘图表面 Graphics g = this pictureBoxII CreateGraphics(); //填充成白色 g FillRectangle(Brushes White this ClientRectangle); //弄一个绘图路径¶ GraphicsPath gp = new GraphicsPath(); //添加一些集合图形 gp AddEllipse( ); gp AddPie( ); gp AddRectangle(new Rectangle( )); //在绘图表面上绘制绘图路径 g DrawPath(Pens Blue gp); //平移 g TranslateTransform( ); //填充绘图路径¶ g FillPath(Brushes GreenYellow gp); gp Dispose();
区域——Region类 从已有的矩形和路径可以创建Region 使用Graphics FillRegion方法绘制Region 该类指示由矩形和由路径构成的图形形状的内部 无法继承此类 渐变色填充 需要使用两个刷子 线性梯度刷子(LinearGradientBrush) 路径梯度刷子(PathGuadientBrush) private void button _Click(object sender System EventArgs e)
//绘图表面 Graphics g = this pictureBoxII CreateGraphics(); g FillRectangle(Brushes White this pictureBoxII ClientRectangle); //定义一个线性梯度刷子 LinearGradientBrush lgbrush = new LinearGradientBrush( new Point( ) new Point( ) Color FromArgb( ) Color FromArgb( )); Pen pen = new Pen(lgbrush); //用线性笔刷梯度效果的笔绘制一条直线段并填充一个矩形 g DrawLine(pen ); g FillRectangle(lgbrush ); //定义路径并添加一个椭圆 GraphicsPath gp = new GraphicsPath(); gp AddEllipse( ); //用该路径定义路径梯度刷子 PathGradientBrush brush = new PathGradientBrush(gp); //颜色数组 Color[] colors = Color FromArgb( ) Color FromArgb( ) Color FromArgb( ) Color FromArgb( ); //定义颜色渐变比率 float[] r = f f f f; ColorBlend blend = new ColorBlend(); blend Colors = colors; blend Positions = r; brush InterpolationColors = blend; //在椭圆外填充一个矩形 g FillRectangle(brush ); //用添加了椭圆的路径定义第二个路径梯度刷子 GraphicsPath gp = new GraphicsPath(); gp AddEllipse( ); PathGradientBrush brush = new PathGradientBrush(gp ); //设置中心点位置和颜色 brush CenterPoint = new PointF( ); brush CenterColor = Color FromArgb( ); //设置边界颜色 Color[] color = Color FromArgb( ); brush SurroundColors = color ; //用第二个梯度刷填充椭圆 g FillEllipse(brush );
GDI+的坐标系统 通用坐标系——用户自定义坐标系 页面坐标系——虚拟坐标系 设备坐标系——屏幕坐标系 当页面坐标系和设备坐标系的单位都是象素时 它们相同 private void button _Click(object sender System EventArgs e) Graphics g = this pictureBoxII CreateGraphics(); g Clear(Color White); this Draw(g); private void Draw(Graphics g) g DrawLine(Pens Black ); g DrawEllipse(Pens Black ); g DrawArc(Pens Black ); g DrawRectangle(Pens Green ); private void button _Click(object sender System EventArgs e)
//左移 Graphics g = this pictureBoxII CreateGraphics(); g Clear(Color White); g TranslateTransform( ); this Draw(g); private void button _Click(object sender System EventArgs e) //右移 Graphics g = this pictureBoxII CreateGraphics(); g Clear(Color White); g TranslateTransform( ); this Draw(g); private void button _Click(object sender System EventArgs e) //旋转 Graphics g = this pictureBoxII CreateGraphics(); g Clear(Color White); g RotateTransform( ); this Draw(g); private void button _Click(object sender System EventArgs e) //放大 Graphics g = this pictureBoxII CreateGraphics(); g Clear(Color White); g ScaleTransform( f f); this Draw(g); private void button _Click(object sender System EventArgs e) //缩小 Graphics g = this pictureBoxII CreateGraphics(); g Clear(Color White); g ScaleTransform( f f); this Draw(g); 全局坐标——变换对于绘图表面上的每个图元都会产生影响 通常用于设定通用坐标系 一下程序将原定移动到控件中心 并且Y轴正向朝上 //先画一个圆 Graphics g = e Graphics; g FillRectangle(Brushes White this ClientRectangle); g DrawEllipse(Pens Black ); //使y轴正向朝上 必须做相对于x轴镜像 //变换矩阵为[ ] Matrix mat = new Matrix( ); g Transform = mat; Rectangle rect = this ClientRectangle; int w = rect Width; int h = rect Height; g TranslateTransform(w/ h/ );
//以原点为中心 做一个半径为 的圆 g DrawEllipse(Pens Red ); g TranslateTransform( ); g DrawEllipse(Pens Green ); g ScaleTransform( ); g DrawEllipse(Pens Blue ); 局部坐标系——只对某些图形进行变换 而其它图形元素不变 protected override void OnPaint(PaintEventArgs e) Graphics g = e Graphics; //客户区设置为白色 g FillRectangle(Brushes White this ClientRectangle); //y轴朝上 Matrix mat = new Matrix( ); g Transform = mat; //移动坐标原点到窗体中心 Rectangle rect = this ClientRectangle; int w = rect Width; int h = rect Height; g TranslateTransform(w/ h/ );
//在全局坐标下绘制椭圆 g DrawEllipse(Pens Red ); g FillRectangle(Brushes Black ); g FillRectangle(Brushes Black ); g FillRectangle(Brushes Black ); g FillRectangle(Brushes Black ); //创建一个椭圆然后在局部坐标系中进行变换 GraphicsPath gp = new GraphicsPath(); gp AddEllipse( ); Matrix mat = new Matrix(); //平移 mat Translate( ); //旋转 mat Rotate( ); gp Transform(mat ); g DrawPath(Pens Blue gp); PointF[] p = gp PathPoints; g FillRectangle(Brushes Black p[ ] X p[ ] Y+ ); g FillRectangle(Brushes Black p[ ] X p[ ] Y+ ); g FillRectangle(Brushes Black p[ ] X p[ ] Y ); g FillRectangle(Brushes Black p[ ] X p[ ] Y ); gp Dispose(); //base OnPaint (e);
cha138/Article/program/net/201311/12222相关参考
C#GDI+绘图高级编程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一般来说Windows的
基于VC.NET的GDI+编程之CImage 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我们
C++编程人员容易犯的10个C#错误(下) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 错误虚
C++编程人员容易犯的10个C#错误(上) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我们知
用VB.NET绘制GDI图形 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!下面的例子通过重载For
VC++.NET中使用GDI+创建特效字体 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!来自于微软
C#中利用GDI作图解决异或问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! usingSys
C#中使用GDI让网站新闻标题个性化 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 新华网上的今
.Net程序开发中较为隐蔽的GDI泄露探析收藏 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 最
知识大全 Visual Basic.NET和GDI+共创图标编辑器
VisualBasic.NET和GDI+共创图标编辑器 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧