vb.net 教程 5-16 图像处理例子 2 半透明的图片水印

图片水印有两种方法,一是读取水印的所有像素颜色,颜色上加上设置的alpha值,然后将每个像素绘制到指定的位置;二是使用颜色矩阵( 如果忘记了如何使用颜色矩阵的朋友,可以参看《 vb.net 教程 5-16 图像处理之ImageAttributes 类1 颜色矩阵1 》开始的内容),这也是本节所采用的方法
设计界面,这里测试使用了一个ie的图标作为图片水印:
绘制图片使用的方法Graphics.DrawImage。
具体代码
Private Sub Button2_Click(sender As Object,e As EventArgs) Handles Button2.Click
        Dim logoOpacity As Single = HScrollBar1.Value / 255
        Dim logoImg As Bitmap = PictureBox2.Image
        Dim logoLeft As Integer = 10
        Dim logoTop As Integer = 10

        Dim imgDest As Bitmap = PictureBox1.Image.Clone
        Dim g As Graphics = Graphics.FromImage(imgDest)

        Dim matrixArray()() As Single = {
              New Single() {1,0},New Single() {0,1,logoOpacity,1}}
        Dim cMatrix As New Imaging.ColorMatrix(matrixArray)
        Dim imgAttr As New Imaging.ImageAttributes()
        imgAttr.SetColorMatrix(cMatrix,Imaging.ColorMatrixFlag.Default,Imaging.ColorAdjustType.Bitmap)

        Dim recDest As New Rectangle(logoLeft,logoTop,logoImg.Width,logoImg.Height)
        g.DrawImage(logoImg,recDest,logoImg.Height,GraphicsUnit.Pixel,imgAttr)

        g.dispose()
        PictureBox3.Image = imgDest
    End Sub
这种方法比第一种绘制像素的方法要更加简便。
下面解释一下代码
运行结果:

由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供参考。

学习更多vb.net知识,请参看vb.net 教程 目录

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...