zoukankan      html  css  js  c++  java
  • 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])

    常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill

    逆天博客:http://dnt.dkil.net

    逆天通用水印扩展篇~新增剪贴板系列的功能和手动配置,卸除原基础不常用的功能:http://www.cnblogs.com/dunitian/p/5377097.html


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

    水印类

        /// <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
        }
    

     水印位置枚举

        /// <summary>
        /// 水印位子
        /// </summary>
        public enum WaterMarkLocationEnum
        {
            /// <summary>
            /// 顶部居左
            /// </summary>
            TopLeft = 1,
            /// <summary>
            /// 顶部居中
            /// </summary>
            TopCenter = 2,
            /// <summary>
            /// 顶部居右
            /// </summary>
            TopRight = 3,
            /// <summary>
            /// 中部居左
            /// </summary>
            CenterLeft = 4,
            /// <summary>
            /// 中部居中
            /// </summary>
            CenterCenter = 5,
            /// <summary>
            /// 中部居右
            /// </summary>
            CenterRight = 6,
            /// <summary>
            /// 底部居左
            /// </summary>
            BottomLeft = 7,
            /// <summary>
            /// 底部居左
            /// </summary>
            BottomCenter = 8,
            /// <summary>
            /// 底部居左
            /// </summary>
            BottomRight = 9,
        }
    

     水印类型枚举

    /// <summary>
        /// 水印类型
        /// </summary>
        public enum WaterMarkTypeEnum
        {
            /// <summary>
            /// 文字
            /// </summary>
            Text = 1,
            /// <summary>
            /// 图片
            /// </summary>
            Image = 2,
            /// <summary>
            /// 无水印
            /// </summary>
            NoneMark = 3
        }
    

     水印帮助类(自己封装的,有bug可以像我反馈)

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

      简单调用:

    文字水印调用:

            /// <summary>
            /// 文字水印调用
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                //给水印对象赋对应的值
                WaterMark waterMark = new WaterMark();
                waterMark.WaterMarkType = Enums.WaterMarkTypeEnum.Text;
                waterMark.Transparency = 0.7f;
                waterMark.Text = "dunitian.cnblogs.com";
                waterMark.FontStyle = System.Drawing.FontStyle.Bold;
                waterMark.FontFamily = "Consolas";
                waterMark.FontSize = 20f;
                waterMark.BrushesColor = System.Drawing.Brushes.YellowGreen;
                waterMark.WaterMarkLocation = Enums.WaterMarkLocationEnum.CenterCenter;
    
                //调用
                Image successImage = WaterMarkHelper.SetWaterMark("text.png", waterMark);
                //保存
                successImage.Save("text1.png", System.Drawing.Imaging.ImageFormat.Png);
    
                MessageBox.Show("请查看软件根目录", "成功");
            }
    

      图片水印调用:

    /// <summary>
            /// 图片水印调用
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void Button_Click_1(object sender, RoutedEventArgs e)
            {
                //给水印对象赋对应的值
                WaterMark waterMark = new WaterMark();
                waterMark.WaterMarkType = Enums.WaterMarkTypeEnum.Image;
                waterMark.ImgPath = "水印.png";
                waterMark.WaterMarkLocation = Enums.WaterMarkLocationEnum.CenterCenter;
                waterMark.Transparency = 0.7f;
    
                //调用
                Image successImage = WaterMarkHelper.SetWaterMark("text.png", waterMark);
                //保存
                successImage.Save("text2.png", System.Drawing.Imaging.ImageFormat.Png);
    
                MessageBox.Show("请查看软件根目录","成功");
            }
    

      软件源码:(helper类不是最新,用上文的helper类)

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

      

    <Window x:Class="WaterMarkAPP.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="水印工具" Height="545" Width="298" Background="Transparent" AllowsTransparency="True" 
            WindowStyle="None" WindowStartupLocation="CenterScreen" MouseLeftButtonDown="DragWindow" Icon="1.ico">
    
        <!--快乐玩耍:DIV一个手机-->
        <!--手机整体-->
        <Border BorderBrush="Green" 
                Background="Black"
                BorderThickness="4"
                CornerRadius="10,10,10,10">
            <Grid>
                <!--主屏幕-->
                <Border BorderBrush="Gray" 
                    BorderThickness="2"
                    Margin="10,50,10,40">
                    <Grid Background="#FF151515">
                        <Grid.RowDefinitions>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                        </Grid.RowDefinitions>
                        <TextBlock FontFamily="微软雅黑">对不起,系统已挂请联系逆天重装Win10!</TextBlock>
                        <Button Grid.Row="1" Opacity="0.6"  HorizontalAlignment="Center" VerticalAlignment="Center" Height="50" Width="100" Click="BtnFont_Click">单文水印</Button>
                        <Button Grid.Row="2" Opacity="0.6"  HorizontalAlignment="Center" VerticalAlignment="Center" Height="50" Width="100" Click="BtnImage_Click">单图水印</Button>
                        <Button Grid.Row="3" Opacity="0.6"  HorizontalAlignment="Center" VerticalAlignment="Center" Height="50" Width="100" Click="BtnFonts_Click">批文水印</Button>
                        <Button Grid.Row="4" Opacity="0.6"  HorizontalAlignment="Center" VerticalAlignment="Center" Height="50" Width="100" Click="BtnImages_Click">批图水印</Button>
                        <Button Grid.Row="5" Opacity="0.6"  HorizontalAlignment="Center" VerticalAlignment="Center" Height="50" Width="100" Click="Button_Click">关闭程序</Button>
                    </Grid>
                </Border>
                <!--底部-->
                <Border BorderBrush="Black" 
                    BorderThickness="2"
                    CornerRadius="0,0,10,10"
                    VerticalAlignment="Bottom"
                    Height="40">
                    <!--底部按键-->
                    <Grid>
                        <TextBlock Text="毒" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="80,0,0,0" Width="20" Foreground="Gray" MouseLeave="TextBlock_MouseLeave" />
                        <TextBlock Text="逆" HorizontalAlignment="Center" VerticalAlignment="Center" Width="20" Foreground="Gray"  MouseLeave="TextBlock_MouseLeave_1"/>
                        <TextBlock Text="天" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,0,80,0" Width="20" Foreground="Gray"  MouseLeave="TextBlock_MouseLeave_2"/>
                    </Grid>
                </Border>
            </Grid>
        </Border>
    </Window>
    

     效果:

    V1.0源码下载:http://pan.baidu.com/s/1gd1300z

    最新源码:https://github.com/dunitian/DNTLive/tree/master/Software/WaterMarkAPP

  • 相关阅读:
    Python算法:推导、递归和规约
    K-means的缺点(优化不仅仅是最小化误差)
    从统计学角度来看深度学习(2):自动编码器和自由能
    从统计学角度来看深度学习(1):递归广义线性模型
    Why are Eight Bits Enough for Deep Neural Networks?
    VCS引起的oracle数据库异常重新启动一例
    赵雅智:service_startService生命周期
    第九章 两种模式的比較
    CSDN Markdown简明教程3-表格和公式
    OpenStack_Swift源代码分析——Object-auditor源代码分析(1)
  • 原文地址:https://www.cnblogs.com/dunitian/p/4939369.html
Copyright © 2011-2022 走看看