C# 关于画图Graphics Bitmap image
关于GDI+ 的使用,就对点,线,面的画的操作,图像剪裁,缩放等等操作,了解各种常用的方法和属性。
常用命名空间:System.Drawing;System.Drawing.Image;System.Drawing.Drawing2D;
Graphics类封装了一个GDI+绘图图面,提供将对象绘制到显示到设备的方法。Graphics叫画板,只不过这个画板中带了很多工具。但画图时你要定义画板的大小,颜色等等,还应给他一张画纸;
Graphics
1.创建Graphics基本方法:
Graphics g = this.CreateGraphics();
Graphics g = e;// Paint事件中的
Graphics g = Graphics.FromImage();//Graphics.Fromxx类的各种静态方法。
谁创建Graphics对象,就在谁上画。
2.画的方法:
g.Drawxx 的各种方法。
3.Graphics用的 画笔和画刷
pen 和 Font
pen.PenType //属性
pen.DashStyle
Font f = new Font( "宋体", 15, FontStyle.Bold | FontStyle.Italic );
Brush //画刷
派生类:
LinearGradientBrush//渐变画刷
SolidBrush//单色画刷
HatchBrush //用阴影样式 (机械制图时用的多)
TextureBrush//画字
ImageBrush//图片画刷
VisualBrush//
RadialGradientBrush
DrawingBrush
4.图片处理
      1. Graphics.SmoothingMode 
  //消除锯齿常用
      2. Graphics.InterpolationMode  
//图像缩放常用
      3. Graphics.CompositingQuality  //
5. clear()方法:
Graphics g.clear(Color.Blue);// 不是清除xx颜色,是清除背景并设置xx颜色。
Bitmap ,image 和 Icon
        
Bitmap bmp = new Bitmap(16, 16);
        
Bitmap bmp1 = 
Bitmap.FromHbitmap(bmp.GetHbitmap());
        Image 
image = 
Image.FromFile(@"C:\\temp.jpg");
        
bmp.MakeTransparent(Color.FromArgb(255, 0, 255));//把xx颜色设置透明色
          
for (int i = 0; i < bmp.Width; 
i++)
            
{
                
for (int j = 0; j < bmp.Height; 
j++)
                
{
                     if 
(bmp.GetPixel(i, j) == 
Color.Blue)//获取像素设置
                    
{
                        
bmp.SetPixel(i, j, 
Color.Red);
                    
}
                
}
            
}
  
ImageAttributes imageAttr = new 
ImageAttributes();//通过位图和图元文件颜色的信息设置颜色
  imageAttr.SetColorKey(lowerColor,upperColor, ColorAdjustType.Default);
  e.Graphics.DrawImage(Image, rect, 0, 0, 
100, 100,  GraphicsUnit.Pixel, imageAttr);
  Stream IconStream = 
System.IO.File.OpenWrite(fileName);
  Bitmap bitmap = new 
Bitmap(pbImage.Image);
  bitmap.SetResolution(32, 32);
  Icon 
icon = 
System.Drawing.Icon.FromHandle(bitmap.GetHicon());
  icon.Save(IconStream);//比bitmap.save格式强点
其他常用:
        
Clipboard.SetDataObject(this.pbSource.Image);//截图
        IDataObject 
data = 
Clipboard.GetDataObject();
        if 
(data.GetDataPresent(DataFormats.Bitmap))
               image 
= (Bitmap)data.GetData(DataFormats.Bitmap);
        
Color c = KnownColor.Control;  
        Color 
c = Color.FromArgb(128, 
Color.Blue);  //128为半透明颜色     
this.Opacity = 0.5//窗体的透明度
System.Drawing.Drawing2D 命名空间下GraphicsPath
      
//创建矢量图
        Bitmap bmp = new 
Bitmap(220,220);
        Graphics g = 
Graphics.FromImage(bmp);
        Metafile 
mf  = new 
Metafile(filePath,g.GetHdc());
        
//画图...
        
g.Save();
        
g.Dispose();
        
mf.Dispose();
 防止图片闪烁,双缓冲设置
     
SetStyle(ControlStyles.UserPaint |    
                
  ControlStyles.AllPaintingInWmPaint |  
                 
 ControlStyles.OptimizedDoubleBuffer | 
              
    ControlStyles.ResizeRedraw 
|
               
   ControlStyles.SupportsTransparentBackColor, true);
尽量不要用窗体TransparencyKey否则闪烁和卡顿会使用闪烁更严重。
       
不要在Paint事件给各种 xx.Image 赋值,xx.Image会调用paint这样会死循环。
    
图像的各种效果(底片、浮雕、黑白、滤镜)只是算法问题。
原文:http://www.cnblogs.com/bjchaofan/p/3511965.html
