⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 watermark.cs

📁 一个C#开发的类似PHOTOSHOP的软件,用到了很多图形算法.
💻 CS
字号:
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

namespace PhotoSprite.ImageProcessing
{
  /// <summary>
  /// 图像水印处理类
  /// </summary>
  public class Watermark : ImageInfo
  {
    /**************************************************
     * 
     * 水印文字定位
     * 
     * X 坐标、Y 坐标、对齐方式
     * 
     **************************************************/

    /// <summary>
    /// 获取或设置水印文字 X 坐标
    /// </summary>
    public int X
    {
      get
      {
        return x;
      }
      set
      {
        x = value;
      }
    }
    /// <summary>
    /// X 坐标
    /// </summary>
    int x = 0;


    /// <summary>
    /// 获取或设置水印文字 Y 坐标
    /// </summary>
    public int Y
    {
      get
      {
        return y;
      }
      set
      {
        y = value;
      }
    }
    /// <summary>
    /// Y 坐标
    /// </summary>
    int y = 0;


    /// <summary>
    /// 水印文字对齐方式
    /// </summary>
    public Function.AlignMode Align
    {
      get
      {
        return align;
      }
      set
      {
        align = value;
      }
    }
    /// <summary>
    /// 对齐方式
    /// </summary>
    Function.AlignMode align = Function.AlignMode.TopLeft;


    /**************************************************
     * 
     * 文字属性
     * 
     * 字体簇、大小、字形、字体颜色
     * 
     **************************************************/

    /// <summary>
    /// 获取或设置字体簇
    /// </summary>
    public string FontFamily
    {
      get
      {
        return fontFamily;
      }
      set
      {
        fontFamily = value;
      }
    }
    /// <summary>
    /// 字体簇
    /// </summary>
    string fontFamily = "Arial";

    /// <summary>
    /// 获取或设置字体大小
    /// </summary>
    public int FontSize
    {
      get
      {
        return fontSize;
      }
      set
      {
        fontSize = value;
      }
    }
    /// <summary>
    /// 字体大小
    /// </summary>
    int fontSize = 30;

    /// <summary>
    /// 获取或设置字体风格
    /// </summary>
    public System.Drawing.FontStyle FontWeight
    {
      get
      {
        return fontWeight;
      }
      set
      {
        fontWeight = value;
      }
    }
    /// <summary>
    /// 字体风格
    /// </summary>
    System.Drawing.FontStyle fontWeight = FontStyle.Regular;

    /// <summary>
    /// 获取或设置字体颜色
    /// </summary>
    public Color FontColor
    {
      get
      {
        return fontColor;
      }
      set
      {
        fontColor = value;
      }
    }
    /// <summary>
    /// 字体颜色
    /// </summary>
    Color fontColor = Color.Red;


    /************************************************************
     * 
     * 统计像素点、水印文字
     * 
     ************************************************************/


    /// <summary>
    /// 统计出一个字符含多少个像素点
    /// </summary>
    /// <param name="character">字符</param>
    /// <returns></returns>
    public int CountTextDots(char character)
    {
      Bitmap b = new Bitmap(20, 20);
      Graphics g = Graphics.FromImage(b);
      g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
      g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

      Font font = new Font(new FontFamily("宋体"), 12, FontStyle.Regular);
      SolidBrush brush = new SolidBrush( Color.White);

      g.DrawString(character.ToString(), font, brush, 0, 0);
      g.Save();

      GrayProcessing gp = new GrayProcessing();
      byte[,] Gray = gp.BinaryArray(b, 128);

      int count = 0;

      for (int y = 0; y < 20; y++)
      {
        for (int x = 0; x < 20; x++)
        {
          // 统计白点
          if (Gray[x, y] > 128)
            count++;
        } // x
      } // y

      b.Dispose();

      return count;
    } // end of CountTextDots


    /// <summary>
    /// 水印文字
    /// </summary>
    /// <param name="b">位图流</param>
    /// <param name="text">水印文字</param>
    /// <param name="isHorz">是否按水平方式在图像上写文字</param>
    /// <returns></returns>
    public Bitmap WaterText(Bitmap b, string text, bool isHorz)
    {
      int W = b.Width;
      int H = b.Height;

      Graphics g = Graphics.FromImage(b);

      //g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;  // 高质量插值
      //g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;   // 高质量平滑
      //g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;  // 消除锯齿

      // 确定是水平还是垂直显示文字
      System.Drawing.StringFormat stringFormat = new StringFormat();
      if (!isHorz)
      {
        // 垂直显示文字
        stringFormat.FormatFlags = StringFormatFlags.DirectionVertical;
      }

      // 产生水印文字
      Font waterFont = new Font(fontFamily, fontSize, fontWeight, GraphicsUnit.Pixel);

      // 颜色
      SolidBrush brushColor = new SolidBrush(fontColor);

      // 根据指定的对齐方式对文字进行定位
      Point point = new Point(x, y);

      // 绘制水印文字
      g.DrawString(text, waterFont, brushColor, point.X, point.Y, stringFormat);

      g.Save();
      g.Dispose();

      return b;
    } // end of WaterText

    
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -