吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 2142|回复: 9

[C#] 【源码】逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 )

[复制链接]
毒逆天 发表于 2015-11-5 14:42 | 显示全部楼层 |阅读模式

本帖最后由 小七烤地瓜 于 2015-11-5 21:14 编辑

逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X]) 好几天没上QQ了,今天上了个QQ,,额....额...貌似消息还挺多,没及时回复的还请见谅~~刚好昨天无聊把水印这快封装出来了,支持图片水印,文字水印,索引图水印和非索引图水印,支持位置选择(9个位置 ==》[X])。好吧不高兴屁话了,软件是WPF的(只满足我的需求,如果有需要可以出第个二版本),水印核心代码封装了个Helper类(通用:支持Winform,WPF,Web,WP,Win10)
软件共享一下==>http://pan.baidu.com/s/1qWDwv4C

软件源码:(helper类不是最新,用上文的helper类)
源码下载:http://pan.baidu.com/s/1gd1300z


效果:

                               
登录/注册后可看大图

                               
登录/注册后可看大图


                               
登录/注册后可看大图

                               
登录/注册后可看大图
 源码下载:http://pan.baidu.com/s/1gd1300z


评分

参与人数 9HB +17 THX +8 收起 理由
消逝的过去 + 1
zxjzzh + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
agan8888 + 1
23123123 + 1 学破解论坛1周年了,感谢大家的付出与关注。学破解论坛助你呼风唤雨!!!
阿弥上帝 + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
小七烤地瓜 + 10 + 1 评分=感恩!简单却充满爱!感谢您的作品!
Aniz + 3 + 1 学破解论坛1周年了,感谢大家的付出与关注。学破解论坛助你呼风唤雨!!!
Mrsin + 1 + 1 学破解论坛1周年了,感谢大家的付出与关注。学破解论坛助你呼风唤雨!!!
Zixue + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 毒逆天 发表于 2015-11-5 14:42 | 显示全部楼层

水印类

/// <summary>
/// 水印类(重要参数:原图类型,水印类型,水印位置,图片水印路径,文字水印内容)
/// </summary>
public class WaterMark
{
    #region 基础属性设置
    private string _photoType;
    /// <summary>
    /// 原图类型
    /// </summary>
    public string PhotoType
    {
        get { return _photoType; }
        set { _photoType = value; }
    }

    private WaterMarkTypeEnum _waterMarkType = WaterMarkTypeEnum.NoneMark;
    /// <summary>
    /// 水印类型
    /// </summary>
    public WaterMarkTypeEnum WaterMarkType
    {
        get { return _waterMarkType; }
        set { _waterMarkType = value; }
    }
    #endregion

    #region 水印效果设置
    private WaterMarkLocationEnum _waterMarkLocation = WaterMarkLocationEnum.BottomRight;
    /// <summary>
    /// 水印位置
    /// </summary>
    public WaterMarkLocationEnum WaterMarkLocation
    {
        get { return _waterMarkLocation; }
        set { _waterMarkLocation = value; }
    }

    private float _transparency = 0.7f;
    /// <summary>
    /// 水印透明度
    /// </summary>
    public float Transparency
    {
        get { return _transparency; }
        set { _transparency = value; }
    }
    #endregion

    #region 图片水印设置
    private string _imgPath;
    /// <summary>
    /// 图片水印路径
    /// </summary>
    public string ImgPath
    {
        get { return _imgPath; }
        set { _imgPath = value; }
    }
    #endregion

    #region 文字水印设置
    private string _text = "dunitian";
    /// <summary>
    /// 文字水印内容
    /// </summary>
    public string Text
    {
        get { return _text; }
        set { _text = value; }
    }

    private string _fontFamily = "微软雅黑";
    /// <summary>
    /// 文字字体
    /// </summary>
    public string FontFamily
    {
        get { return _fontFamily; }
        set { _fontFamily = value; }
    }

    private Brush _brushesColor = Brushes.Black;
    /// <summary>
    /// 文字颜色
    /// </summary>
    public Brush BrushesColor
    {
        get { return _brushesColor; }
        set { _brushesColor = value; }
    }

    private  FontStyle _fontStyle = FontStyle.Regular;
    /// <summary>
    /// 字体样式
    /// </summary>
    public FontStyle FontStyle
    {
        get { return _fontStyle; }
        set { _fontStyle = value; }
    }

    private float _fontSize = 14f;
    /// <summary>
    /// 字体大小
    /// </summary>
    public float FontSize
    {
        get { return _fontSize; }
        set { _fontSize = value; }
    }
    #endregion
}
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 毒逆天 发表于 2015-11-5 14:43 | 显示全部楼层

水印位置枚举:
/// <summary>
/// 水印位子
/// </summary>
public enum WaterMarkLocationEnum
{
&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;/// 顶部居左
&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;TopLeft = 1,
&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;/// 顶部居中
&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;TopCenter = 2,
&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;/// 顶部居右
&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;TopRight = 3,
&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;/// 中部居左
&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;CenterLeft = 4,
&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;/// 中部居中
&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;CenterCenter = 5,
&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;/// 中部居右
&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;CenterRight = 6,
&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;/// 底部居左
&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;BottomLeft = 7,
&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;/// 底部居左
&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;BottomCenter = 8,
&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;/// 底部居左
&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;BottomRight = 9,
}
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 毒逆天 发表于 2015-11-5 14:44 | 显示全部楼层

水印类型枚举
/// <summary>
&#160;&#160;&#160;&#160;/// 水印类型
&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;public enum WaterMarkTypeEnum
&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// 文字
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Text = 1,
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// 图片
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Image = 2,
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// 无水印
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;NoneMark = 3
&#160;&#160;&#160;&#160;}
水印帮助类(自己封装的,有bug可以像我反馈)
/// <summary>
/// 水印帮助类
/// </summary>
public class WaterMarkHelper
{
&#160;&#160;&#160;&#160;#region 设置水印
&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;/// 设置水印
&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;/// <param name="imgPath"></param>
&#160;&#160;&#160;&#160;/// <param name="model"></param>
&#160;&#160;&#160;&#160;/// <returns></returns>
&#160;&#160;&#160;&#160;public static Image SetWaterMark(string imgPath, WaterMark model)
&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//获取背景图
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Image imgSource = Image.FromFile(imgPath);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//获取水印图片
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Image markImg = null;
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//水印检验(文字,图片[路径下是否存在图片])
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#region 水印校验+水印处理
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (model == null)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return null;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//看看原图是否存在
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (!System.IO.File.Exists(imgPath))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return null;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//根据水印类型校验+水印处理
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;switch (model.WaterMarkType)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;case WaterMarkAPP.Enums.WaterMarkTypeEnum.Text:
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (string.IsNullOrEmpty(model.Text))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return null;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;markImg = TextToImager(model);//水印处理-如果是文字就转换成图片
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;case WaterMarkAPP.Enums.WaterMarkTypeEnum.Image:
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (!System.IO.File.Exists(model.ImgPath))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return null;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//获得水印图像&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;markImg = Image.FromFile(model.ImgPath);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;case WaterMarkAPP.Enums.WaterMarkTypeEnum.NoneMark:
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return imgSource;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#endregion
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#region 创建颜色矩阵
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//创建颜色矩阵
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;float[][] ptsArray ={
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;new float[] {1, 0, 0, 0, 0},
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;new float[] {0, 1, 0, 0, 0},
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;new float[] {0, 0, 1, 0, 0},
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;new float[] {0, 0, 0, model.Transparency, 0}, //注意:0.0f为完全透明,1.0f为完全不透明
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;new float[] {0, 0, 0, 0, 1}};
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ColorMatrix colorMatrix = new ColorMatrix(ptsArray);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//新建一个Image属性
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ImageAttributes imageAttributes = new ImageAttributes();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//将颜色矩阵添加到属性
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Default);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#endregion
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//原图格式检验+水印
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#region 原图格式检验+水印
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//判断是否是索引图像格式
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (imgSource.PixelFormat == PixelFormat.Format1bppIndexed || imgSource.PixelFormat == PixelFormat.Format4bppIndexed || imgSource.PixelFormat == PixelFormat.Format8bppIndexed)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#region 索引图片,转成位图再加图片
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//转成位图,这步很重要
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Bitmap bitmap = new Bitmap(imgSource.Width, imgSource.Height);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Graphics graphic = Graphics.FromImage(bitmap);
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#region 缩放处理
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//如果原图小于水印图片 等比缩放水印图
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (markImg.Width >= imgSource.Width || markImg.Height >= imgSource.Height)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;markImg = ImageShrink(imgSource, markImg);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#endregion
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#region 水印位置
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//水印位置
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int x;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int y;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WaterMarkLocations(model, imgSource, markImg, out x, out y);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#endregion
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//将原图画在位图上
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;graphic.DrawImage(imgSource, new Point(0, 0));
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//将水印加在位图上
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;graphic.DrawImage(markImg, new Rectangle(x, y, markImg.Width, markImg.Height), 0, 0, markImg.Width, markImg.Height, GraphicsUnit.Pixel, imageAttributes);
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;graphic.Dispose();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return bitmap;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#endregion
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#region 非索引图片,直接在上面加上水印
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Graphics graphic = Graphics.FromImage(imgSource);
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#region 缩放处理
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//如果原图小于水印图片 等比缩放水印图
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (markImg.Width >= imgSource.Width || markImg.Height >= imgSource.Height)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;markImg = ImageShrink(imgSource, markImg);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#endregion
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#region 水印位置
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//水印位置
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int x;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int y;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WaterMarkLocations(model, imgSource, markImg, out x, out y);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#endregion
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//将水印加在原图上
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;graphic.DrawImage(markImg, new Rectangle(x, y, markImg.Width, markImg.Height), 0, 0, markImg.Width, markImg.Height, GraphicsUnit.Pixel, imageAttributes);
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;graphic.Dispose();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return imgSource;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#endregion
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#endregion
&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;#endregion
&#160;
&#160;&#160;&#160;&#160;#region 水印处理-文字转图片
&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;/// 水印处理-文字转图片
&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;/// <param name="model"></param>
&#160;&#160;&#160;&#160;/// <returns></returns>
&#160;&#160;&#160;&#160;private static Image TextToImager(WaterMark model)
&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Font f = new Font(model.FontFamily, model.FontSize, model.FontStyle);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Bitmap fbitmap = new Bitmap(Encoding.GetEncoding("GBK").GetByteCount(model.Text) / 2 * f.Height, f.Height);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Graphics gh = Graphics.FromImage(fbitmap);//创建一个画板;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;gh.SmoothingMode = SmoothingMode.AntiAlias;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;gh.DrawString(model.Text, f, model.BrushesColor, 0, 0);//画字符串
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return fbitmap as Image;
&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;#endregion
&#160;
&#160;&#160;&#160;&#160;#region 水印位置
&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;/// 水印位置
&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;/// <param name="model"></param>
&#160;&#160;&#160;&#160;/// <param name="imgSource"></param>
&#160;&#160;&#160;&#160;/// <param name="markImg"></param>
&#160;&#160;&#160;&#160;/// <param name="x"></param>
&#160;&#160;&#160;&#160;/// <param name="y"></param>
&#160;&#160;&#160;&#160;private static void WaterMarkLocations(WaterMark model, Image imgSource, Image markImg, out int x, out int y)
&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;x = 0;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;y = 0;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;switch (model.WaterMarkLocation)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;case WaterMarkLocationEnum.TopLeft:
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;x = 0;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;y = 0;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;case WaterMarkLocationEnum.TopCenter:
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;x = imgSource.Width / 2 - markImg.Width / 2;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;y = 0;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;case WaterMarkLocationEnum.TopRight:
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;x = imgSource.Width - markImg.Width;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;y = 0;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;case WaterMarkLocationEnum.CenterLeft:
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;x = 0;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;y = imgSource.Height / 2 - markImg.Height / 2;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;case WaterMarkLocationEnum.CenterCenter:
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;x = imgSource.Width / 2 - markImg.Width / 2;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;y = imgSource.Height / 2 - markImg.Height / 2;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;case WaterMarkLocationEnum.CenterRight:
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;x = imgSource.Width - markImg.Width;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;y = imgSource.Height / 2 - markImg.Height / 2;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;case WaterMarkLocationEnum.BottomLeft:
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;x = 0;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;y = imgSource.Height - markImg.Height;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;case WaterMarkLocationEnum.BottomCenter:
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;x = imgSource.Width / 2 - markImg.Width / 2;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;y = imgSource.Height - markImg.Height;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;case WaterMarkLocationEnum.BottomRight:
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;x = imgSource.Width - markImg.Width;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;y = imgSource.Height - markImg.Height;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;#endregion
&#160;
&#160;&#160;&#160;&#160;#region 缩放水印
&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;/// 等比缩放水印图(缩小到原图的1/3)
&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;/// <param name="imgSource"></param>
&#160;&#160;&#160;&#160;/// <param name="successImage"></param>
&#160;&#160;&#160;&#160;/// <returns></returns>
&#160;&#160;&#160;&#160;private static Image ImageShrink(Image imgSource, Image markImg)
&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int w = 0;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int h = 0;
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Image.GetThumbnailImageAbort callb = null;
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//对水印图片生成缩略图,缩小到原图的1/3(以短的一边为准)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (imgSource.Width < imgSource.Height)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;w = imgSource.Width / 3;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;h = markImg.Height * w / markImg.Width;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;h = imgSource.Height / 3;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;w = markImg.Width * h / markImg.Height;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;markImg = markImg.GetThumbnailImage(w, h, callb, new System.IntPtr());
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return markImg;
&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;#endregion
}
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 毒逆天 发表于 2015-11-5 14:45 | 显示全部楼层

简单调用:
/// <summary>
/// 文字水印调用
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Click(object sender, RoutedEventArgs e)
{
&#160;&#160;&#160;&#160;//给水印对象赋对应的值
&#160;&#160;&#160;&#160;WaterMark waterMark = new WaterMark();
&#160;&#160;&#160;&#160;waterMark.WaterMarkType = Enums.WaterMarkTypeEnum.Text;
&#160;&#160;&#160;&#160;waterMark.Transparency = 0.7f;
&#160;&#160;&#160;&#160;waterMark.Text = "dunitian.cnblogs.com";
&#160;&#160;&#160;&#160;waterMark.FontStyle = System.Drawing.FontStyle.Bold;
&#160;&#160;&#160;&#160;waterMark.FontFamily = "Consolas";
&#160;&#160;&#160;&#160;waterMark.FontSize = 20f;
&#160;&#160;&#160;&#160;waterMark.BrushesColor = System.Drawing.Brushes.YellowGreen;
&#160;&#160;&#160;&#160;waterMark.WaterMarkLocation = Enums.WaterMarkLocationEnum.CenterCenter;
&#160;
&#160;&#160;&#160;&#160;//调用
&#160;&#160;&#160;&#160;Image successImage = WaterMarkHelper.SetWaterMark("text.png", waterMark);
&#160;&#160;&#160;&#160;//保存
&#160;&#160;&#160;&#160;successImage.Save("text1.png", System.Drawing.Imaging.ImageFormat.Png);
&#160;
&#160;&#160;&#160;&#160;MessageBox.Show("请查看软件根目录", "成功");
}
图片水印调用:
/// <summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// 图片水印调用
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <param name="sender"></param>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <param name="e"></param>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private void Button_Click_1(object sender, RoutedEventArgs e)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//给水印对象赋对应的值
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WaterMark waterMark = new WaterMark();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;waterMark.WaterMarkType = Enums.WaterMarkTypeEnum.Image;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;waterMark.ImgPath = "水印.png";
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;waterMark.WaterMarkLocation = Enums.WaterMarkLocationEnum.CenterCenter;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;waterMark.Transparency = 0.7f;
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//调用
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Image successImage = WaterMarkHelper.SetWaterMark("text.png", waterMark);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//保存
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;successImage.Save("text2.png", System.Drawing.Imaging.ImageFormat.Png);
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;MessageBox.Show("请查看软件根目录","成功");
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Zixue 发表于 2015-11-5 14:45 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 毒逆天 发表于 2015-11-5 14:46 | 显示全部楼层

wpf主程序后台代码:
namespace WaterMarkAPP
{
&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;/// MainWindow.xaml 的交互逻辑
&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;public partial class MainWindow : Window
&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public MainWindow()
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;InitializeComponent();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#region 按钮事件
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// 单文水印
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <param name="sender"></param>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <param name="e"></param>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private void BtnFont_Click(object sender, RoutedEventArgs e)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WaterMark waterMark = WaterMarkFont();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;DIVWaterMark(waterMark);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// 批文水印
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <param name="sender"></param>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <param name="e"></param>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private void BtnFonts_Click(object sender, RoutedEventArgs e)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WaterMark waterMark = WaterMarkFont();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;DIVWaterMarks(waterMark);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// 单图水印
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <param name="sender"></param>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <param name="e"></param>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private void BtnImage_Click(object sender, RoutedEventArgs e)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WaterMark waterMark = WaterMarkImage();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;DIVWaterMark(waterMark);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// 批图水印
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <param name="sender"></param>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <param name="e"></param>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private void BtnImages_Click(object sender, RoutedEventArgs e)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WaterMark waterMark = WaterMarkImage();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;DIVWaterMarks(waterMark);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#endregion
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#region 关闭程序
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// 关闭程序
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <param name="sender"></param>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <param name="e"></param>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private void Button_Click(object sender, RoutedEventArgs e)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Environment.Exit(0);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#endregion
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#region 窗体拖动
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// 窗体拖动
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <param name="sender"></param>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <param name="e"></param>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private void DragWindow(object sender, MouseButtonEventArgs e)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (e.LeftButton == MouseButtonState.Pressed)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;DragMove();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#endregion
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#region 版权系列
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private void TextBlock_MouseLeave(object sender, MouseEventArgs e)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Process.Start("http://dunitian.cnblogs.com/");
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private void TextBlock_MouseLeave_1(object sender, MouseEventArgs e)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Process.Start("http://tieba.baidu.com/f?kw=毒逆天");
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private void TextBlock_MouseLeave_2(object sender, MouseEventArgs e)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Process.Start("http://1054186320.qzone.qq.com/");
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#endregion
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#region 软件代码(水印核心代码请看Helper类,最简洁的调用请看APIDemo文件夹里面的内容)
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#region 水印预设
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// 水印文字预设
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <returns></returns>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private static WaterMark WaterMarkFont()
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WaterMark waterMark = new WaterMark();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;waterMark.WaterMarkType = Enums.WaterMarkTypeEnum.Text;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;waterMark.Transparency = 0.7f;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;waterMark.Text = "dunitian.cnblogs.com";
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;waterMark.FontStyle = System.Drawing.FontStyle.Bold;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;waterMark.FontFamily = "Consolas";
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;waterMark.FontSize = 20f;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;waterMark.BrushesColor = System.Drawing.Brushes.YellowGreen;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;waterMark.WaterMarkLocation = Enums.WaterMarkLocationEnum.CenterCenter;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return waterMark;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// 图片水印预设
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <returns></returns>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private static WaterMark WaterMarkImage()
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WaterMark waterMark = new WaterMark();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;waterMark.WaterMarkType = Enums.WaterMarkTypeEnum.Image;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;waterMark.ImgPath = "水印.png";
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;waterMark.WaterMarkLocation = Enums.WaterMarkLocationEnum.BottomRight;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;waterMark.Transparency = 0.7f;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return waterMark;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#endregion
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#region 水印操作
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// 单个水印操作
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <param name="waterMark"></param>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private static void DIVWaterMark(WaterMark waterMark)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#region 必须参数获取
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;OpenFileDialog dialog = new OpenFileDialog
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Filter = "png(*.png)|*.png|jpg(*.jpg)|*.jpg|bmp(*.bmp)|*.bmp|gif(*.gif)|*.gif|jpeg(*.jpeg)|*.jpeg",
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Title = "打开一张图片"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;};
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (dialog.ShowDialog() != true)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//图片路径
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;string filePath = dialog.FileName;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//文件名
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;string fileName = System.IO.Path.GetFileNameWithoutExtension(filePath);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//图片所处目录
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;string dirPath = System.IO.Path.GetDirectoryName(filePath);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//存放目录
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;string savePath = dirPath + "\\DNTWaterMark";
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//是否存在,不存在就创建
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (!Directory.Exists(savePath))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Directory.CreateDirectory(savePath);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#endregion
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#region 水印操作
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Image successImage = WaterMarkHelper.SetWaterMark(filePath, waterMark);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (successImage != null)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//保存图片(不管打不打开都保存)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;successImage.Save(savePath + "\\" + fileName + ".png", System.Drawing.Imaging.ImageFormat.Png);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//是否打开目录
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;MessageBoxResult result = MessageBox.Show("水印成功!是否打开目录?", "逆天友情提醒", MessageBoxButton.YesNo);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (result == MessageBoxResult.Yes)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.Diagnostics.Process.Start("explorer.exe ", savePath);//打开保存后的路径
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;MessageBox.Show("水印失败!请检查原图和水印图!", "逆天友情提醒");
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#endregion
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// 批量水印操作
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// </summary>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/// <param name="waterMark"></param>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private void DIVWaterMarks(WaterMark waterMark)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.Windows.Forms.FolderBrowserDialog dialog = new System.Windows.Forms.FolderBrowserDialog
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Description = "选择你要批量水印的图片目录"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;};
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;string[] files = Directory.GetFiles(dialog.SelectedPath);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (files.Length <= 0)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#region 存储专用
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//图片所处目录
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;string dirPath = System.IO.Path.GetDirectoryName(files[0]);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//存放目录
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;string savePath = dirPath + "\\DNTWaterMark";
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//是否存在,不存在就创建
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (!Directory.Exists(savePath))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Directory.CreateDirectory(savePath);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#endregion
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;int num = 0;//计数用
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;foreach (string filePath in files)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//文件名
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;string fileName = System.IO.Path.GetFileNameWithoutExtension(filePath);
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Image successImage = WaterMarkHelper.SetWaterMark(filePath, waterMark);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (successImage != null)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//保存图片
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;successImage.Save(savePath + "\\" + fileName + ".png", System.Drawing.Imaging.ImageFormat.Png);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;num++;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//是否打开目录
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;MessageBoxResult result = MessageBox.Show("逆天友情提醒:已转换 " + num + " 张图片~是否打开目录?", "转换状态", MessageBoxButton.YesNo);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (result == MessageBoxResult.Yes)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.Diagnostics.Process.Start("explorer.exe ", savePath);//打开保存后的路径
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#endregion
&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#endregion
&#160;&#160;&#160;&#160;}
}
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 毒逆天 发表于 2015-11-5 14:47 | 显示全部楼层

wpf主程序前台代码
<Window x:Class="WaterMarkAPP.MainWindow"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Title="水印工具" Height="545" Width="298" Background="Transparent" AllowsTransparency="True"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WindowStyle="None" WindowStartupLocation="CenterScreen" MouseLeftButtonDown="DragWindow" Icon="1.ico">
&#160;
&#160;&#160;&#160;&#160;<!--快乐玩耍:DIV一个手机-->
&#160;&#160;&#160;&#160;<!--手机整体-->
&#160;&#160;&#160;&#160;<Border BorderBrush="Green"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Background="Black"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BorderThickness="4"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;CornerRadius="10,10,10,10">
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Grid>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<!--主屏幕-->
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Border BorderBrush="Gray"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BorderThickness="2"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Margin="10,50,10,40">
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Grid Background="#FF151515">
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Grid.RowDefinitions>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<RowDefinition></RowDefinition>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<RowDefinition></RowDefinition>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<RowDefinition></RowDefinition>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<RowDefinition></RowDefinition>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<RowDefinition></RowDefinition>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<RowDefinition></RowDefinition>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<RowDefinition></RowDefinition>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</Grid.RowDefinitions>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<TextBlock FontFamily="微软雅黑">对不起,系统已挂请联系逆天重装Win10!</TextBlock>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Button Grid.Row="1" Opacity="0.6"&#160; HorizontalAlignment="Center" VerticalAlignment="Center" Height="50" Width="100" Click="BtnFont_Click">单文水印</Button>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Button Grid.Row="2" Opacity="0.6"&#160; HorizontalAlignment="Center" VerticalAlignment="Center" Height="50" Width="100" Click="BtnImage_Click">单图水印</Button>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Button Grid.Row="3" Opacity="0.6"&#160; HorizontalAlignment="Center" VerticalAlignment="Center" Height="50" Width="100" Click="BtnFonts_Click">批文水印</Button>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Button Grid.Row="4" Opacity="0.6"&#160; HorizontalAlignment="Center" VerticalAlignment="Center" Height="50" Width="100" Click="BtnImages_Click">批图水印</Button>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Button Grid.Row="5" Opacity="0.6"&#160; HorizontalAlignment="Center" VerticalAlignment="Center" Height="50" Width="100" Click="Button_Click">关闭程序</Button>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</Grid>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</Border>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<!--底部-->
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Border BorderBrush="Black"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BorderThickness="2"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;CornerRadius="0,0,10,10"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;VerticalAlignment="Bottom"
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Height="40">
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<!--底部按键-->
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<Grid>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<TextBlock Text="毒" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="80,0,0,0" Width="20" Foreground="Gray" MouseLeave="TextBlock_MouseLeave" />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<TextBlock Text="逆" HorizontalAlignment="Center" VerticalAlignment="Center" Width="20" Foreground="Gray"&#160; MouseLeave="TextBlock_MouseLeave_1"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<TextBlock Text="天" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,0,80,0" Width="20" Foreground="Gray"&#160; MouseLeave="TextBlock_MouseLeave_2"/>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</Grid>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</Border>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</Grid>
&#160;&#160;&#160;&#160;</Border>
</Window>
收工~~
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
yaf 发表于 2015-11-6 13:32 | 显示全部楼层

求代码编辑器名称,或者安装包下载地址!infeeling@yeah.net
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 毒逆天 发表于 2015-11-10 13:48 | 显示全部楼层

yaf 发表于 2015-11-6 13:32
求代码编辑器名称,或者安装包下载地址!

最新版的:
Visual Studio 2015 企业版

http://pan.baidu.com/pcloud/album/file?album_id=8733800179130909438&uk=4147226162&fsid=184841206017336

Visual Studio 2015 企业版激活秘钥
Key :HM6NR-QXX7C-DFW2Y-8B82K-WTYJV
Key :2XNFG-KFHR8-QV3CP-3W6HT-683CH

详细:https://www.52hb.com/thread-15791-1-1.html
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表