C# 关于画图Graphics Bitmap image

61 篇文章 1 订阅

关于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  //
  1. 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  =SystemColors.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这样会死循环。
图像的各种效果(底片、浮雕、黑白、滤镜)只是算法问题。
  • 11
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值