本文参考自 http://blog.csdn.net/bobui/article/details/5136643
private void button1_Click(object sender, EventArgs e) //简单的画刷使用
{
Bitmap bmp = new Bitmap(Application.StartupPath + "//1.jpg");
Graphics g = this.CreateGraphics();
TextureBrush tb = new TextureBrush(bmp);//使用对象来填充形状的内部
g.FillRectangle(tb, this.ClientRectangle);
g.Dispose();
tb.Dispose();//释放掉占用的资源
}
private void button2_Click(object sender, EventArgs e) //画刷对象的换行模式
{
Bitmap bmp = new Bitmap(Application.StartupPath + "//1.jpg");
Graphics g = this.CreateGraphics();
TextureBrush tb = new TextureBrush(bmp);
switch (comboBox1.SelectedItem.ToString())
{
case "Clamp":
tb.WrapMode = WrapMode.Clamp;//纹理或渐变没有平铺
g.FillRectangle(tb, this.ClientRectangle);
g.Dispose();
tb.Dispose();
break;
case"Tile":
tb.WrapMode = WrapMode.Tile;//铺平渐变或纹理
g.FillRectangle(tb, this.ClientRectangle);
g.Dispose();
tb.Dispose();
break;
case"TileFlipX":
tb.WrapMode = WrapMode.TileFlipX;//水平反转纹理或渐变,然后在平铺纹理或渐变
g.FillRectangle(tb, this.ClientRectangle);
g.Dispose();
tb.Dispose();
break;
case"TileFlipY":
tb.WrapMode = WrapMode.TileFlipY;//垂直反转纹理或渐变,然后在平铺纹理或渐变
g.FillRectangle(tb, this.ClientRectangle);
g.Dispose();
tb.Dispose();
break;
case"TileFlipXY":
tb.WrapMode = WrapMode.TileFlipXY;//水平和垂直反转纹理或渐变,然后平铺该纹理或渐变
g.FillRectangle(tb, this.ClientRectangle);
g.Dispose();
tb.Dispose();
break;
}
}
效果图依次如下:
private void button3_Click(object sender, EventArgs e) //用颜色矩阵来调节图片
{
Bitmap bmp = new Bitmap(Application.StartupPath + "//1.jpg");
Graphics g = this.CreateGraphics();
float[][] matrix ={
new float[]{0.2f,0.0f,0.0f,0.0f,0.0f},
new float[]{0.0f,1.0f,0.0f,0.0f,0.0f},
new float[]{0.0f,0.0f,1.0f,0.0f,0.0f},
new float[]{0.0f,0.0f,0.0f,0.5f,0.0f},
new float[]{0.0f,0.0f,0.0f,0.0f,0.0f}
};
ColorMatrix colorMatrix = new ColorMatrix(matrix);
ImageAttributes imgAtt = new ImageAttributes();
imgAtt.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
TextureBrush tb = new TextureBrush(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height), imgAtt);
//用指定的bmp文件,相应的边框信息和(imgAtt)包含TextureBrush所使用的图像的附加信息实例化tb
tb.WrapMode = WrapMode.Tile;
g.FillRectangle(tb, this.ClientRectangle);
}
效果图如下:
下面给大家讲下颜色矩阵的含义 5*5矩阵 第一行至第五行分别代表红色,绿色,蓝色,alpha透明度,虚拟位,一般情况下都是调节对角线上的颜色值来改变图片的颜色。
C#貌似是用32位来表示颜色的属性的 24位颜色值和8位透明度的值,编程中,也习惯用1来表示255 。例如,(0,1,0,1)表示没有红色和蓝色,绿色值达到最大透明度最大,这边透明度为1的时候,表示的是图片原来的颜色属性,大家可以用QQ面板上的调节透明度的功能来测试下透明度的效果。
注:本人也是在最近才查了资料,对颜色矩阵有了个大概的了解,如果讲解的有偏差,还望告诉本人,我会即时更新,以便少出错误,谢谢。
private void button4_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics();
LinearGradientBrush lgb = new LinearGradientBrush(new Point(0, 0), new Point(150, 150), Color.Wheat, Color.Blue);
//由坐标(0,0)指向(150,150)由wheat颜色逐渐变成blue颜色
g.FillRectangle(lgb,this.ClientRectangle);
g.Dispose();
}
private void button5_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics();
GraphicsPath gp = new GraphicsPath();
gp.AddLine(110, 110, 150, 15);//向gp追加一条线段
gp.AddLine(150, 15, 100, 96);
gp.AddLine(100, 96, 15, 110);
gp.CloseFigure();//闭合当前的图形
g.FillRectangle(Brushes.Blue, this.ClientRectangle);
g.DrawPath(Pens.AntiqueWhite, gp);//开始绘制
gp.Dispose();
}
效果图如下:
private void button6_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics();
GraphicsPath gp = new GraphicsPath();
gp.AddLine(50,50,100,100);
gp.AddLine(100, 100, 50, 150);
gp.AddLine(50, 150, 0, 100);
gp.CloseFigure();
PathGradientBrush pgb = new PathGradientBrush(gp);//通过渐变来填充gp
pgb.CenterColor = Color.White;//pgb的中心颜色
pgb.SurroundColors = new Color[] //pgb的外围 颜色
{
Color.Blue
};
g.SmoothingMode = SmoothingMode.AntiAlias;//消除锯齿
g.FillRectangle(pgb, this.ClientRectangle);
g.Dispose();
}
效果图如下:
private void button7_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics();
HatchBrush hb = new HatchBrush(HatchStyle.Cross, Color.Blue, Color.Red);
g.FillRectangle(hb, this.ClientRectangle);
g.Dispose();
}
效果图如下:
private void button8_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics();
g.FillRectangle(Brushes.White, this.ClientRectangle);
HatchBrush hb = new HatchBrush(HatchStyle.WideUpwardDiagonal, Color.Blue, Color.Red);
Pen p = new Pen(hb, 7);
g.DrawRectangle(p, 20, 20, 50, 50);
}
效果图如下:
大家可以用我这代码自己找张图片试试看效果,效果其实也很明显的。 谁有好的建议 请提出来,谢谢喽。
本人 QQ521070107 王永鹏