欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#向圖片添加水印的兩種不同場景與解決方法

 更新時(shí)間:2016年09月23日 09:28:40   投稿:daisy  
這篇文章給大家介紹了兩種大家可能需要的功能,利用C#實(shí)現(xiàn)不同需求的向圖片添加水印的方法,文章通過效果圖和示例代碼介紹的很詳細(xì),有需要的朋友們可以參考借鑒。

場景一

也就是大家經(jīng)常用的,一般是圖片的4個(gè)角落,基于橫縱坐標(biāo)來添加。

效果如下:

添加水印方法

static void addWatermarkText(Graphics picture,int fontsize, string _watermarkText, string _watermarkPosition, int _width, int _height)
  {
   int[] sizes = new int[] {32, 14, 12, 10, 8, 6, 4 };
   Font crFont = null;
   SizeF crSize = new SizeF();
 
   crFont = new Font("微軟雅黑", fontsize, FontStyle.Bold);
   crSize = picture.MeasureString(_watermarkText, crFont);
 
   float xpos = 0;
   float ypos = 0;
   Color color =Color.Firebrick;
 
   switch (_watermarkPosition)
   {
    case "WM_TOP_LEFT":
     xpos = ((float)_width * (float).01) + (crSize.Width / 2);
     ypos = (float)_height * (float).01;
     break;
    case "WM_TOP_RIGHT":
     xpos = ((float)_width * (float).99) - (crSize.Width / 2);
     ypos = (float)_height * (float).01;
     break;
    case "WM_BOTTOM_RIGHT":
     xpos = ((float)_width * (float).99) - (crSize.Width / 2);
     ypos = ((float)_height * (float).99) - crSize.Height;
     break;
    case "WM_BOTTOM_LEFT":
     xpos = ((float)_width * (float).01) + (crSize.Width / 2);
     ypos = ((float)_height * (float).99) - crSize.Height;
     break;
     
   }
    
   StringFormat StrFormat = new StringFormat();
   StrFormat.Alignment = StringAlignment.Center;
   SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(153, 0, 0, 0));//加陰影
   picture.DrawString(_watermarkText, crFont, semiTransBrush2, xpos + 1, ypos + 1, StrFormat);
 
   SolidBrush semiTransBrush = new SolidBrush(color); //添加水印
   picture.DrawString(_watermarkText, crFont, semiTransBrush, xpos, ypos, StrFormat);
 
   semiTransBrush2.Dispose();
   semiTransBrush.Dispose();
  }

場景二

在圖片內(nèi)基于固定位置,文字始終居中。剛開始我基于第一種場景來根據(jù)水印漢字的長度來計(jì)算坐標(biāo),后來發(fā)現(xiàn)方法始終不可靠。現(xiàn)在是先在圖片固定區(qū)域(水印區(qū)域)畫一個(gè)矩形,然后再矩形內(nèi)添加水印漢字,并使用畫刷保持文字居中。

效果圖如下

添加水印的方法

static void addWatermarkText(Graphics picture,string type, int fontsize, string _watermarkText)
  {
   //1、先畫矩形
   RectangleF drawRect;
   Color color;
   if (type == "Top")
   {
     drawRect = new RectangleF(73, 135, 450, 64);
     color = Color.FromArgb(255, 255, 255);
   }
   else
   {
     drawRect = new RectangleF(194, 245, 250, 39);
     color = Color.FromArgb(244, 226, 38);
   }
    
   //2、在基于矩形畫水印文字
   Font crFont = null;
 
   StringFormat StrFormat = new StringFormat();
   StrFormat.Alignment = StringAlignment.Center;
 
   crFont = new Font("微軟雅黑", fontsize, FontStyle.Bold);
   SolidBrush semiTransBrush = new SolidBrush(color); //添加水印
   picture.DrawString(_watermarkText, crFont, semiTransBrush, drawRect, StrFormat);
 
   semiTransBrush.Dispose();
  }

總結(jié)

和第一種方法比起來,第二種方法更直觀,更短小精悍,只需要在你需要添加水印的圖片上計(jì)算好固定坐標(biāo)然后先畫一個(gè)矩形,然后把水印漢字畫在矩形內(nèi),這樣不管水印漢字如何變化都可以在圖片固定位置居中。以上就是這篇文章的全部內(nèi)容,希望能對大家的學(xué)習(xí)或者工作帶來一定的幫助。

相關(guān)文章

  • C#算法之實(shí)現(xiàn)阿姆斯特朗數(shù)

    C#算法之實(shí)現(xiàn)阿姆斯特朗數(shù)

    這篇文章介紹了C#實(shí)現(xiàn)阿姆斯特朗數(shù)的算法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • C#中逆變的實(shí)際應(yīng)用場景詳解

    C#中逆變的實(shí)際應(yīng)用場景詳解

    在好多的.net的書籍中都看到過逆變和協(xié)變的概念,也在網(wǎng)上搜了一些關(guān)于這兩個(gè)概念的解釋,但是一直感覺似懂非懂的,直到最近在項(xiàng)目中實(shí)際遇到了一個(gè)問題,恰好用到了逆變,下面這篇文章主要給大家介紹了關(guān)于C#中逆變的實(shí)際應(yīng)用場景,需要的朋友可以參考下
    2022-01-01
  • C#實(shí)現(xiàn)Winform無邊框移動的方法

    C#實(shí)現(xiàn)Winform無邊框移動的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)Winform無邊框移動的方法,涉及C#針對WinForm窗口操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • WPF實(shí)現(xiàn)抽屜菜單效果的示例代碼

    WPF實(shí)現(xiàn)抽屜菜單效果的示例代碼

    這篇文章主要介紹了如何利用WPF實(shí)現(xiàn)抽屜菜單效果,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下
    2022-08-08
  • C# Dynamic關(guān)鍵字之:dynamic為什么比反射快的詳解

    C# Dynamic關(guān)鍵字之:dynamic為什么比反射快的詳解

    本篇文章是對C#中dynamic為什么比反射快進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#使用CallContext緩存線程數(shù)據(jù)

    C#使用CallContext緩存線程數(shù)據(jù)

    這篇文章介紹了C#使用CallContext緩存線程數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C語言使用getch()讀取方向鍵

    C語言使用getch()讀取方向鍵

    getch()是編程中所用的函數(shù),這個(gè)函數(shù)是一個(gè)不回顯函數(shù),當(dāng)用戶按下某個(gè)字符時(shí),函數(shù)自動讀取,無需按回車,有的C語言命令行程序會用到此函數(shù)做游戲,但是這個(gè)函數(shù)并非標(biāo)準(zhǔn)函數(shù),要注意移植性
    2021-07-07
  • C#中using指令的幾種用法

    C#中using指令的幾種用法

    本文介紹的是C#中using指令的幾種用法,希望對你有幫助,一起來看吧!
    2015-10-10
  • 獲得.net控件的windows句柄的方法

    獲得.net控件的windows句柄的方法

    有一個(gè)簡單的獲得控件的句柄的竅門。你將窗體設(shè)置為鼠標(biāo)可捕獲,那么你的窗口句柄可以通過使用Windows API捕獲。 這個(gè)想法在以下的GetHWnd函數(shù)中實(shí)現(xiàn):
    2013-04-04
  • C#與C++枚舉的區(qū)別對比和使用案例

    C#與C++枚舉的區(qū)別對比和使用案例

    本文詳細(xì)講解了C#與C++枚舉的區(qū)別對比和使用案例,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04

最新評論