标题:在PictureBox上做水印,怎么才能让图片或然Print的文字透明?
只看楼主
VB小白菜啊
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-5-1
结帖率:66.67%
已结贴  问题点数:10 回复次数:8 
在PictureBox上做水印,怎么才能让图片或然Print的文字透明?
在PictureBox上做水印,怎么才能让图片或然Print的文字透明?;
就是让Print在PictureBox的文字透明或者图片透明,找了一天了,;
似乎只有alphablend()能让图片透明,但是结果不是我要的,他是把字和背景混合了,;
我需要的是背景不变,只要文字透明,这样才是我要的水印,请问有什么方法能做吗?;
对gdi这些方法又不熟悉,请各位高手们多多指教。
搜索更多相关主题的帖子: 水印 图片 Print 文字 透明 
2018-12-05 05:37
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册: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: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:49
帖 子:393
专家分:2025
注 册: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: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册: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: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册: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
帖 子:1242
专家分:122
注 册: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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-491834-1-1.html




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

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