''' <summary> ''' Watermarks the file sOrinignalfilehandle with the content of sWatermarkfilehandle. The resulting ''' watermarked picture is written to sOriginalfilehandle. ''' ''' Returns 1 for success, -1 if the operation can not be performed because of size mismatches ''' </summary> ''' <param name="sOriginalfilehandle"></param> ''' <param name="sWatermarkfilehandle"></param> ''' <remarks></remarks> Private Function WaterMarkFile(ByVal sOriginalfilehandle As String, ByVal sWatermarkfilehandle As String) As Integer Dim oCanvas As Bitmap Using oFs As New FileStream(sOriginalfilehandle, FileMode.Open, FileAccess.Read) Using oSourceimage As Bitmap = Bitmap.FromStream(oFs) Using oWatermark As Bitmap = Bitmap.FromFile(sWatermarkfilehandle) ' --- Watermark must be equal or smaller then source dimensions If oWatermark.Width > oSourceimage.Width Or oWatermark.Height > oSourceimage.Height Then Return -1 End If ' // ' --- Center watermark Dim xStart As Integer = (Int(oSourceimage.Width - oWatermark.Width) / 2) - 1 Dim yStart As Integer = (Int(oSourceimage.Height - oWatermark.Height) / 2) - 1 ' // ' --- Perform watermarking For x = xStart To xStart + oWatermark.Width - 1 For y = yStart To yStart + oWatermark.Height - 1 Dim oWatermarkpixel As Color = oWatermark.GetPixel(x - xStart, y - yStart) If oWatermarkpixel.A > 0 Then ' --- There is watermark alpha present Dim oOriginalpixel As Color = oSourceimage.GetPixel(x, y) Dim PixelMultiplier As Single = 1 - CSng(((1 - oWatermarkpixel.GetBrightness)) * 0.25) Dim NewPixel As Color = Color.FromArgb(oOriginalpixel.A, CInt(oOriginalpixel.R * PixelMultiplier), CInt(oOriginalpixel.G * PixelMultiplier), CInt(oOriginalpixel.B * PixelMultiplier)) oSourceimage.SetPixel(x, y, NewPixel) End If Next Next ' // ' --- oSourceimage is locked by GDI+, create clone to save oCanvas = oSourceimage.Clone ' // End Using End Using End Using oCanvas.Save(sOriginalfilehandle, System.Drawing.Imaging.ImageFormat.Png) Return 1 En