| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 191 人关注过本帖
标题:在PictureBox上做水印,怎么才能让图片或然Print的文字透明?
只看楼主 加入收藏
VB小白菜啊
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-5-1
结帖率:66.67%
  已结贴   问题点数:10  回复次数:8   
在PictureBox上做水印,怎么才能让图片或然Print的文字透明?
在PictureBox上做水印,怎么才能让图片或然Print的文字透明?;
就是让Print在PictureBox的文字透明或者图片透明,找了一天了,;
似乎只有alphablend()能让图片透明,但是结果不是我要的,他是把字和背景混合了,;
我需要的是背景不变,只要文字透明,这样才是我要的水印,请问有什么方法能做吗?;
对gdi这些方法又不熟悉,请各位高手们多多指教。
2018-12-05 05:37
wmf2014
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:156
帖 子:1717
专家分:9556
注 册:2014-12-6
  得分:0 
对于PaintPicture控件,可以用PaintPicture方法将另一个PaintPicture控件中的内容使用“and、or、xor”的模式叠加上来,达到水印的效果。

能编个毛线衣吗?
2018-12-05 11:37
VB小白菜啊
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-5-1
  得分:0 
回复 2楼 wmf2014
试了一下PainPicture方法 但是我要的效果是叠加的水印能够透明,或者是画出的文字可以有透明度,用PainPicture画出来的只能叠加上去,有没有其他的方法。
2018-12-05 13:43
wds1
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:30
帖 子:304
专家分:1637
注 册:2016-3-10
  得分:0 
看看这个行不
Private Sub Command1_Click()
  AddTxtToPicAndSave Picture1, "文字水印", 100, 200, "d:\1.bmp", 0
End Sub

Private Sub AddTxtToPicAndSave(Picture As PictureBox, strText As String, x As Long, y As Long, SFile As String, SaveType As Integer)
   With Picture
   .AutoRedraw = True
   .CurrentX = x
   .CurrentY = y
   .Font = "黑体"
   .FontBold = True
   .ForeColor = vbRed
   .FontSize = 22
   Picture.Print strText
   Select Case SaveType
   Case 0 'BMP
     SavePicture .Image, SFile
   Case 1
   '需要第三方控件来保存为其它图像格式
   End Select
  End With
End Sub

没注意,原来要求透明文字


[此贴子已经被作者于2018-12-5 17:11编辑过]

2018-12-05 16:46
VB小白菜啊
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-5-1
  得分:0 
回复 4楼 wds1
这也是我用过的,然而字体还是会遮住图片。 虽然说字体换成华文彩云还能挽救一下下。
2018-12-05 18:52
wmf2014
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:156
帖 子:1717
专家分:9556
注 册:2014-12-6
  得分:0 
回复 3楼 VB小白菜啊
应该不会的,我下述代码有水印效果,如下:
Private Sub Command1_Click()
  With Picture2
    .BackColor = &HFFFFFF
    .BorderStyle = 0
    .ForeColor = &H33FF33
    .FontSize = 36
    .Font = "黑体"
    .AutoRedraw = True
  End With
  Picture2.Print "加水印"
  Picture1.PaintPicture Picture2.Image, 900, 1800, Picture2.ScaleWidth, Picture2.ScaleHeight, 0, 0, Picture2.ScaleWidth, Picture2.ScaleHeight, &H8800C6
End Sub

运行效果:
附件: 您没有浏览附件的权限,请 登录注册

能编个毛线衣吗?
2018-12-05 19:11
wmf2014
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:156
帖 子:1717
专家分:9556
注 册:2014-12-6
  得分:10 
&H8800C6是and模式,如果用or(&HEE0086)模式则字亮度会加强,此时必须把picture2.backcolor=0设置为黑色。代码及运行效果如下:

Private Sub Command1_Click()
  With Picture2
    .BackColor = 0
    .BorderStyle = 0
    .ForeColor = &H18801
    .FontSize = 36
    .Font = "黑体"
    .AutoRedraw = True
  End With
  Picture2.Print "加水印"
  Picture1.PaintPicture Picture2.Image, 900, 1800, Picture2.ScaleWidth, Picture2.ScaleHeight, 0, 0, Picture2.ScaleWidth, Picture2.ScaleHeight, &HEE00C6
End Sub


[此贴子已经被作者于2018-12-5 19:32编辑过]

附件: 您没有浏览附件的权限,请 登录注册

能编个毛线衣吗?
2018-12-05 19:22
VB小白菜啊
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-5-1
  得分:0 
回复 7楼 wmf2014
惊了惊了,,我爱你版主,
2018-12-06 00:00
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1238
专家分:112
注 册:2007-1-2
  得分:0 
如果只是文字的话,下面的方式最简单:
程序代码:

Private Declare Function SetBkMode Lib "gdi32.dll" (ByVal hdc As Long, ByVal nBkMode As Long) As Long
Private Declare Function TextOut Lib "gdi32.dll" Alias "TextOutW" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As Long, ByVal nCount As Long) As Long

Private Sub Command1_Click()
  Dim strOut As String
  With Me        '如果要用图片框,注意改成窗体上的控件名称
    SetBkMode .hdc, 1
    .ForeColor = &HFF&  '红色的字
    With .Font
      .Bold = True    '粗体
      .Size = 20      '文字大小
    End With
    strOut = "文字水印"
    TextOut .hdc, 100, 100, StrPtr(strOut), Len(strOut)
  End With
End Sub


VB QQ群:47715789
2018-12-07 14:01







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.066776 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved