文谷首页 | 业界传真 | 网络技术 | 服务器 | 数据库 | 存储技术 | 系统安全 | 无线技术 | Cisco | .Net | Windows | Linux | Unix | Java
电子商务 | 网站工程 | 网页设计 | 平面设计 | 多媒体 | 编程语言 | Oracle | MSSQL | Photoshop | ASP | PHP | 实用技巧 | 进程查询 | 文谷论坛
 websphere   .net framework
您现在的位置: IT文谷 >> 开发平台 >> .net framework >> .NET Framework >> 文章正文
GDI+编程10个基本技巧2006-7-15GDI+编程10个基本技巧2006-7-15GDI+编程10个基本技巧
GDI+编程10个基本技巧2006-7-15GDI+编程10个基本技巧2006-7-15GDI+编程10个基本技巧
GDI+编程10个基本技巧

GDI+编程10个基本技巧2006-7-15GDI+编程10个基本技巧2006-7-15GDI+编程10个基本技巧

 

Graphics g = this.pictureBoxII1.CreateGraphics();

g.Clear(Color.White);

g.RotateTransform(-30);

this.Draw(g);

}


private void button8_Click(object sender, System.EventArgs e)

{

//放大

Graphics g = this.pictureBoxII1.CreateGraphics();

g.Clear(Color.White);

g.ScaleTransform(1.2f, 1.2f);

this.Draw(g);

}


private void button9_Click(object sender, System.EventArgs e)

{

//缩小

Graphics g = this.pictureBoxII1.CreateGraphics();

g.Clear(Color.White);

g.ScaleTransform(0.8f, 0.8f);

this.Draw(g);

}


全局坐标——变换对于绘图表面上的每个图元都会产生影响。通常用于设定通用坐标系。


一下程序将原定移动到控件中心,并且Y轴正向朝上。


//先画一个圆

Graphics g = e.Graphics;

g.FillRectangle(Brushes.White, this.ClientRectangle);

g.DrawEllipse(Pens.Black, -100, -100, 200, 200);


//使y轴正向朝上,必须做相对于x轴镜像

//变换矩阵为[1,0,0,-1,0,0]

Matrix mat = new Matrix(1, 0, 0, -1, 0, 0);

g.Transform = mat;

Rectangle rect = this.ClientRectangle;

int w = rect.Width;

int h = rect.Height;

g.TranslateTransform(w/2, -h/2);


//以原点为中心,做一个半径为100的圆

g.DrawEllipse(Pens.Red, -100, -100, 200, 200);


g.TranslateTransform(100, 100);

g.DrawEllipse(Pens.Green, -100, -100, 200, 200);

g.ScaleTransform(2, 2);

g.DrawEllipse(Pens.Blue, -100, -100, 200, 200);



局部坐标系——只对某些图形进行变换,而其它图形元素不变。


protected override void OnPaint(PaintEventArgs e)

{

Graphics g = e.Graphics;

//客户区设置为白色

g.FillRectangle(Brushes.White, this.ClientRectangle);

//y轴朝上

Matrix mat = new Matrix(1, 0, 0, -1, 0, 0);

g.Transform = mat;

//移动坐标原点到窗体中心

Rectangle rect = this.ClientRectangle;

int w = rect.Width;

int h = rect.Height;

g.TranslateTransform(w/2, -h/2);

//在全局坐标下绘制椭圆

g.DrawEllipse(Pens.Red, -100, -100, 200, 200);

g.FillRectangle(Brushes.Black, -108, 0, 8, 8);

g.FillRectangle(Brushes.Black, 100, 0, 8, 8);

g.FillRectangle(Brushes.Black, 0, 100, 8, 8);

g.FillRectangle(Brushes.Black, 0, -108, 8, 8);


//创建一个椭圆然后在局部坐标系中进行变换

GraphicsPath gp = new GraphicsPath();

gp.AddEllipse(-100, -100, 200, 200);

Matrix mat2 = new Matrix();

//平移

mat2.Translate(150, 150);

//旋转

mat2.Rotate(30);

gp.Transform(mat2);

g.DrawPath(Pens.Blue, gp);


PointF[] p = gp.PathPoints;

g.FillRectangle(Brushes.Black, p[0].X-2, p[0].Y+2, 4, 4);

g.FillRectangle(Brushes.Black, p[3].X-2, p[3].Y+2, 4, 4);

g.FillRectangle(Brushes.Black, p[6].X-4, p[6].Y-4, 4, 4);

g.FillRectangle(Brushes.Black, p[9].X-4, p[9].Y-4, 4, 4);


gp.Dispose();


//base.OnPaint (e);

}


Alpha混合


Color.FromArgb()的A就是Alpha。Alpha的取值范围从0到255。0表示完全透明,255完全不透明。


当前色=前景色×alpha/255+背景色×(255-alpha)/255


protected override void OnPaint(PaintEventArgs e)

{

Graphics g = e.Graphics;

//创建一个填充矩形

SolidBrush brush = new SolidBrush(Color.BlueViolet);

g.FillRectangle(brush, 180, 70, 200, 150);

//创建一个位图,其中两个位图之间有透明效果

Bitmap bm1 = new Bitmap(200, 100);

Graphics bg1 = Graphics.FromImage(bm1);

SolidBrush redBrush =

new SolidBrush(Color.FromArgb(210, 255, 0, 0));

SolidBrush greenBrush =

new SolidBrush(Color.FromArgb(210, 0, 255, 0));

bg1.FillRectangle(redBrush, 0, 0, 150, 70);

bg1.FillRectangle(greenBrush, 30, 30, 150, 70);

g.DrawImage(bm1, 100, 100);

//创建一个位图,其中两个位图之间没有透明效果

Bitmap bm2 = new Bitmap(200, 100);

Graphics bg2 = Graphics.FromImage(bm2);

bg2.CompositingMode = CompositingMode.SourceCopy;

bg2.FillRectangle(redBrush, 0, 0, 150, 170);

bg2.FillRectangle(greenBrush, 30, 30, 150, 70);

g.CompositingQuality = CompositingQuality.GammaCorrected;

g.DrawImage(bm2, 300, 200);


//base.OnPaint (e);

}




反走样


protected override void OnPaint(PaintEventArgs e)

{

Graphics g = e.Graphics;

//放大8倍

g.ScaleTransform(8, 8);

//没有反走样的图形和文字

Draw(g);


//设置反走样

g.SmoothingMode = SmoothingMode.AntiAlias;


//右移40

g.TranslateTransform(40, 0);

//再绘制就是反走样之后的了

Draw(g);


//base.OnPaint (e);

}


private void Draw(Graphics g)

{

//绘制图形和文字

g.DrawLine(Pens.Gray, 10, 10, 40, 20);

g.DrawEllipse(Pens.Gray, 20, 20, 30, 10);

string s = "反走样测试";

Font font = new Font("宋体", 5);

SolidBrush brush = new SolidBrush(Color.Gray);


g.DrawString(s, font, brush, 10, 40);

}

完了。暂时先总结那么多。以后发现必要的可以再补充。

上一页  [1] [2] [3] [4] 

上一页  [1] [2] [3] [4] 

GDI+编程10个基本技巧2006-7-15GDI+编程10个基本技巧2006-7-15GDI+编程10个基本技巧


  • 上一篇文章:

  • 下一篇文章:
  • 进入论坛讨论

    相关文章
    基于.NET的多线程编程入门
    Microsoft .NET 框架资源基础
    VS2005常用插件搜罗
    .net中用GDI+提高gif图片保存画质
    VS.NET:通过Web服务瞄准电子商务
    对象设计中创建VS使用
    安装/初始化/个性化DotNetNuke
    介绍dotnet原动力(DNN)
    DTE .NET工程的自动化编译
    .Net中如何操作IIS的原理分析
    VS.NETRC5无法创建Add-IN工程
    .NET中带有口令加密的注册页面
    热门文章最新推荐

    版权与免责声明:
    ① 本网转载其他媒体稿件是为传播更多的信息,此类稿件不代表本网观点,版权归原作者所有,本网不承担此类稿件侵权行为的连带责任。
    ② 在本网BBS上发表言论者,文责自负。
    ③ 如您因版权等问题需要与本网联络,请在30日内联系 。
    GDI+编程10个基本技巧2006-7-15GDI+编程10个基本技巧2006-7-15GDI+编程10个基本技巧
    GDI+编程10个基本技巧2006-7-15GDI+编程10个基本技巧2006-7-15GDI+编程10个基本技巧

    .net framework专题
    人气排行
  • 此栏目下没有文章
  • 最近更新
    普通文章技术介绍 新数据网格简介
    普通文章.NET 开发人员该下载的十个必备
    普通文章深入剖析Asp.net资源文件
    普通文章通过事例学习.net的WebForms技
    普通文章ASP.NET Tips1---合并多个字段
    普通文章微软明年1月份出台.NET专业开发
    普通文章微软下月底前完成Vista大部分功
    普通文章揭开微软 .NET 认证考试的面纱
    普通文章Visual Studio:Microsoft开发工
    普通文章Visual Studio:Microsoft开发工
    全站热点       
    最新推荐
    关于文谷 | 联系文谷 | 免责声明 | 文谷社区
    Tel: 0577-65690019    E-mail: ichenjian@gmail.com    MSN:ichenjian@hotmail.com    QQ:2911194
    Copyright © 2004-2006 wengu.org 文谷 All Rights Reserved
    浙ICP备05000327号