zoukankan      html  css  js  c++  java
  • 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  =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这样会死循环。
        图像的各种效果(底片、浮雕、黑白、滤镜)只是算法问题。

  • 相关阅读:
    vue cli3的多环境配置
    【Unity】VSync垂直同步
    css控制中文单词不拐行
    Spring aop 自定义注解 注解声明在类上 aop 前置通知不生效?
    校验日期格式{YYYYMMDD的 java代码
    Spring的@ExceptionHandler注解使用方法
    Pointcut注解表达式@target、@annotation、@within、this、target、within等
    Redisson的简单使用
    JoinPoint和ProceedingJoinPoint区别
    自定义注解详细介绍
  • 原文地址:https://www.cnblogs.com/bjchaofan/p/3511965.html
Copyright © 2011-2022 走看看