2012-10-13 34 views
17

在Internet上自動將水印放到圖像上時,我在stackoverflow中找到了最佳解決方案。問題的鏈接是C# - Add watermark to the photo by special way。我特別感謝Alex Maslakovadrift在搜索解決方案時自動爲圖像添加水印

我實施了一些修改解決方案,我想把水印放在圖像的中心。我修改由漂泊提供的解決方案如下

private void button1_Click(object sender, EventArgs e) 
    { 
     using (Image image = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg")) 
     using (Image watermarkImage = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\watermark.png")) 
     using (Graphics imageGraphics = Graphics.FromImage(image)) 
     using (Brush watermarkBrush = new TextureBrush(watermarkImage)) 
     { 
      int x = (image.Width - watermarkImage.Width)/2; 
      int y = (image.Height - watermarkImage.Height)/2; 
      imageGraphics.FillRectangle(watermarkBrush, new Rectangle(new Point(x, y), watermarkImage.Size)); 
      image.Save(@"C:\Users\Public\Pictures\Sample Pictures\Desert_watermark.jpg"); 
     } 

    } 

但水印沒有正確放置在圖像的中心(參見下圖)。

enter image description here

請指正......

感謝

+0

它看起來老老實實中心給我。你可以用一個盒子來替換那個水印圖像,以清楚它的關閉位置嗎? –

+0

請參閱編輯過的照片... – Riskhan

回答

12

最後我找到解決我的問題...

改正的代碼答案是以下

private void button1_Click(object sender, EventArgs e) 
    { 
     using (Image image = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg")) 
     using (Image watermarkImage = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\watermark.png")) 
     using (Graphics imageGraphics = Graphics.FromImage(image)) 
     using (TextureBrush watermarkBrush = new TextureBrush(watermarkImage)) 
     { 
      int x = (image.Width/2 - watermarkImage.Width/2); 
      int y = (image.Height/2 - watermarkImage.Height/2); 
      watermarkBrush.TranslateTransform(x, y); 
      imageGraphics.FillRectangle(watermarkBrush, new Rectangle(new Point(x, y), new Size(watermarkImage.Width+1, watermarkImage.Height))); 
      image.Save(@"C:\Users\Public\Pictures\Sample Pictures\Desert_watermark.jpg"); 
     } 

    } 

我感謝Furqan薩夫達爾和Abdias軟件 鏈接Problem in tiling image starting at different height using TextureBrush in C#還幫我解決這個問題

,並感謝所有

最終導致

enter image description here

1

嘗試,中心對準這個代碼:

int x = (image.Width/2 - watermarkImage.Width/2); 
int y = (image.Height/2 - watermarkImage.Height/2); 
+0

我實施了您的解決方案,但結果沒有任何變化,請參閱編輯後的照片 – Riskhan

+0

順便說一下,它是中心對齊的,但從邊緣切割主要是由於刷子尺寸較小。嘗試增加筆刷大小以進行測試。 –

+0

計算結果與原始值相比沒有差異。 – K3N

5

你原來的公式是好的順便說一句,

你確定兩者的解決方案是?一樣?設置您的水印圖像的DPI分辨率等於圖像:

watermarkImage.SetResolution(imageGraphics.DpiX, imageGraphics.DpiY); 

(從我的頭頂,但我認爲屬性名稱是正確的)。

UPDATE:

從影像變化,以便使用SetResolution()爲位圖 - 看看這個改變對你的作品 - 我已經改變了水印被繪製到圖像的方式:

private void button1_Click(object sender, EventArgs e) { 

    using (Bitmap image = Bitmap.FromFile("C:\Users\Public\Pictures\Sample Pictures\Desert.jpg")) 
    using (Bitmap watermarkImage = Bitmap.FromFile("C:\Users\Public\Pictures\Sample Pictures\watermark.png")) 
    using (Graphics imageGraphics = Graphics.FromImage(image)) 
    { 
     watermarkImage.SetResolution(imageGraphics.DpiX, imageGraphics.DpiY); 

     int x = ((image.Width - watermarkImage.Width)/2); 
     int y = ((image.Height - watermarkImage.Height)/2); 

     imageGraphics.DrawImage(watermarkImage, x, y, watermarkImage.Width, watermarkImage.Height); 

     image.Save("C:\Users\Public\Pictures\Sample Pictures\Desert_watermark.jpg"); 
    } 
} 
+0

圖像的分辨率爲72dpi的和watermarkimage的分辨率爲96DPI,我找不到上面指定的功能,從而使更改watermarkimage的分辨率手動爲72dpi ,但結果沒有變化 – Riskhan

+0

我已經改變了你的例程,它吸引了水手。看看是否有效。 – K3N

+0

最後我找到了解決問題的方法,請看我自己的答案。很多很多非常感謝您的支持 – Riskhan