网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月03日漏签0天
vb吧 关注:156,056贴子:1,166,216
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 1 2 下一页 尾页
  • 39回复贴,共2页
  • ,跳到 页  
<<返回vb吧
>0< 加载中...

这是deepseek自动生成的一段代码 半透明水印

  • 只看楼主
  • 收藏

  • 回复
  • cxy5636917
  • 简易程序
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在感叹deepseek强大的同时,有一点遗憾,程序运行无效果。请懂API的大神给看看哪里错了?
这是deepseek自动生成的一段代码 半透明水印
'Option Explicit
'
'deepseek的半透明水印,无效果,有待查找原因
Option Explicit
' GDI API声明
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As Long
Private Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdcDest As Long, ByVal nXOriginDest As Long, ByVal nYOriginDest As Long, ByVal nWidthDest As Long, ByVal nHeightDest As Long, ByVal hdcSrc As Long, ByVal nXOriginSrc As Long, ByVal nYOriginSrc As Long, ByVal nWidthSrc As Long, ByVal nHeightSrc As Long, ByVal BLENDFUNCTION As Long) As Long
' 常量和结构体
Private Const TRANSPARENT = 1
Private Const AC_SRC_OVER = &H0
Private Type BLENDFUNCTION
BlendOp As Byte
BlendFlags As Byte
SourceConstantAlpha As Byte
AlphaFormat As Byte
End Type
Public Sub AddTransparentWatermark( _
ByVal picSource As PictureBox, _
ByVal watermarkText As String, _
ByVal fontSize As Integer, _
ByVal textColor As Long, _
ByVal xPos As Long, _
ByVal yPos As Long, _
Optional ByVal alpha As Byte = 128)
Dim hdcTemp As Long, hBmpTemp As Long, hBmpOld As Long
Dim blendFunc As BLENDFUNCTION
Dim picWidth As Long, picHeight As Long
' 确保以像素为单位计算尺寸
picSource.ScaleMode = vbPixels
picWidth = picSource.ScaleWidth
picHeight = picSource.ScaleHeight
' 创建临时DC和位图(初始为黑色背景)
hdcTemp = CreateCompatibleDC(picSource.hdc)
hBmpTemp = CreateCompatibleBitmap(picSource.hdc, picWidth, picHeight)
hBmpOld = SelectObject(hdcTemp, hBmpTemp)
' 清空临时DC为黑色(后续混合时黑色区域透明)
BitBlt hdcTemp, 0, 0, picWidth, picHeight, 0, 0, 0, vbMergePen
' 在临时DC上绘制透明文本
SetBkMode hdcTemp, TRANSPARENT
SetTextColor hdcTemp, textColor
With picSource.Font
.Name = "Arial"
.Size = fontSize
.Bold = True
End With
TextOut hdcTemp, xPos, yPos, watermarkText, Len(watermarkText)
' 配置混合参数(关键修正点)
blendFunc.BlendOp = AC_SRC_OVER
blendFunc.BlendFlags = 0
blendFunc.SourceConstantAlpha = alpha ' 控制整体透明度
blendFunc.AlphaFormat = 0 ' 必须设为0
' 将水印混合到原始图片
AlphaBlend picSource.hdc, xPos, yPos, picWidth, picHeight, hdcTemp, 0, 0, picWidth, picHeight, VarPtr(blendFunc)
' 清理资源
SelectObject hdcTemp, hBmpOld
DeleteObject hBmpTemp
DeleteDC hdcTemp
picSource.Refresh
End Sub
Private Sub cmdAddWatermark_Click()
' 加载图片
' Picture1.Picture = LoadPicture("C:\test.jpg")
' 添加半透明水印(参数:PictureBox, 文字, 字体大小, 颜色, X, Y, 透明度)
AddTransparentWatermark Picture1, "Confidential", 24, RGB(255, 255, 0), 0, 0, 128
' 保存为BMP(如需JPG/PNG需第三方库)
SavePicture Picture1.Image, "C:\watermarked.bmp"
End Sub


  • cxy5636917
  • 简易程序
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
BitBlt hdcTemp, 0, 0, picWidth, picHeight, 0, 0, 0, vbBlackness ‘这是原语句。
’


2026-01-03 08:05:04
广告
不感兴趣
开通SVIP免广告
  • cxy5636917
  • 简易程序
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
BitBlt hdcTemp, 0, 0, picWidth, picHeight, 0, 0, 0, vbBlackness ‘这是原语句。
AlphaBlend picSource.hdc, xPos, yPos, picWidth, picHeight, hdcTemp, 0, 0, picWidth, picHeight, VarPtr(blendFunc)
估计是这两句的问题,本人菜鸟,API能看懂,不大会用。请大神看看是哪个参数错了。


  • cxy5636917
  • 简易程序
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
拜托


  • 贴吧用户_7X2SVU4
  • 数据类型
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Picture就没有半透明的功能,你除非自己自定义控件可以,很难的代码


  • 惊鸿0_0
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Option Explicit
Private Type Bitmap
bmType As Long
bmWidth As Long
bmHeight As Long
bmWidthBytes As Long
bmPlanes As Integer
bmBitsPixel As Integer
bmBits As Long
End Type
Private Const LR_LOADFROMFILE = &H10
Private Const IMAGE_BITMAP = 0
Private Declare Function LoadImage Lib "user32" Alias "LoadImageA" (ByVal hInst As Long, ByVal lpsz As String, ByVal dwImageType As Long, ByVal dwDesiredWidth As Long, ByVal dwDesiredHeight As Long, ByVal dwFlags As Long) As Long
Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
Private Type BitMapInfoHeader
biSize As Long
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type
Private Type RGBQuad
rgbBlue As Byte
rgbGreen As Byte
rgbRed As Byte
rgbReserved As Byte
End Type
Private Type BitMapInfo
bmiHeader As BitMapInfoHeader
bmiColors As RGBQuad
End Type
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long
Private Declare Function CreateDIBSection Lib "gdi32" (ByVal hDC As Long, lpbmi As Any, ByVal iUsage As Long, ByRef ppvBits As Long, ByVal hSection As Long, ByVal dwOffset As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BitMapInfo, ByVal wUsage As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hDC As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Const Bits As Long = 32
Private Declare Function SetDIBitsToDevice Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, ByVal dx As Long, ByVal dy As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal Scan As Long, ByVal NumScans As Long, Bits As Any, BitsInfo As BitMapInfo, ByVal wUsage As Long) As Long
Private Sub Command1_Click()
Dim data() As Byte, 水印() As Byte
Dim w As Long, h As Long
Dim w0 As Long, h0 As Long
Dim i As Long, j As Long, k As Long
Dim 透明度 As Long
透明度 = 70
Call GetPic(App.path & "\1.bmp", data())
Call GetPic(App.path & "\0.bmp", 水印())
w = UBound(data, 2)
h = UBound(data, 3)
w0 = UBound(水印, 2)
h0 = UBound(水印, 3)
For i = 0 To 2
For j = 0 To w
For k = 0 To h
If 水印(i, j Mod w0, k Mod h0) > 0 Then
data(i, j, k) = Val(data(i, j, k)) * 透明度 / 100 + Val(水印(i, j Mod w0, k Mod h0) * (100 - 透明度) / 100)
End If
Next
Next
Next
Dim bi24BitInfo As BitMapInfo
With bi24BitInfo.bmiHeader
.biBitCount = Bits
.biCompression = 0&
.biPlanes = 1
.biSize = Len(bi24BitInfo.bmiHeader)
.biWidth = w + 1
.biHeight = -h - 1
End With
Picture1.ScaleMode = 3
Picture1.Width = w * 15 + 60
Picture1.Height = h * 15 + 60
Picture1.Cls
Call SetDIBitsToDevice(Picture1.hDC, 0, 0, w + 1, h + 1, 0, 0, 0, h + 1, data(0, 0, 0), bi24BitInfo, 0)
Picture1.AutoRedraw = True
SavePicture Picture1.Image, App.path & "\2.bmp"
End Sub
Public Function GetPic(path As String, data() As Byte)
Dim hBitmap As Long, totbyte As Long, BMP As Bitmap, byteAry() As Byte
Dim Tempdata() As Byte, 宽 As Long, 高 As Long, w As Long, h As Long, i As Long
hBitmap = LoadImage(0&, CStr(path), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)
Call GetObject(hBitmap, Len(BMP), BMP)
totbyte = BMP.bmWidthBytes * BMP.bmHeight
ReDim byteAry(totbyte - 1)
Call GetBitmapBits(hBitmap, totbyte, byteAry(0))
宽 = CLng(BMP.bmWidth) - 1
高 = CLng(BMP.bmHeight) - 1
ReDim Tempdata(3, 宽, 高) As Byte
i = 0
For h = 0 To 高
For w = 0 To 宽
Tempdata(0, w, h) = byteAry(i)
Tempdata(1, w, h) = byteAry(i + 1)
Tempdata(2, w, h) = byteAry(i + 2)
i = i + 4
Next
Next
data = Tempdata
End Function


  • 惊鸿0_0
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼





  • 惊鸿0_0
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我可能有什么大病大半夜的写代码


2026-01-03 07:59:04
广告
不感兴趣
开通SVIP免广告
  • 枯行僧
  • 世界你好
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

是不是类似这种的


  • 枯行僧
  • 世界你好
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • cxy5636917
  • 简易程序
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
就是图片加上个半透明的文字作为水印


  • cxy5636917
  • 简易程序
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
ReDim byteAry(totbyte - 1)
下标越界
枯行僧:能不能在deepseek的代码基础上修改成功?


  • klimaa
  • 简易程序
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我试了一下,是VarPtr()的用法不对。很惊讶DeepSeek能做到这个程度,虽然做错了,但是这里我也总出错。
正确的方法是使用CopyMemory:
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, Source As Any, ByVal Length As Long)
Dim lPtr As Long
CopyMemory lPtr, blendFunc, 4
AlphaBlend PicSource.hdc, xPos, yPos, picWidth, picHeight, hdcTemp, 0, 0, picWidth, picHeight, VarPtr(blendFunc)


  • cxy5636917
  • 简易程序
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这是接受klimaa:和初音七奈的修改后修改的,出效果了。我又修改了以下,可以出效果了。
又出现新问题了。字号不起作用,文字后面不应该有个小框
' GDI API声明
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As Long
Private Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdcDest As Long, ByVal nXOriginDest As Long, ByVal nYOriginDest As Long, ByVal nWidthDest As Long, ByVal nHeightDest As Long, ByVal hdcSrc As Long, ByVal nXOriginSrc As Long, ByVal nYOriginSrc As Long, ByVal nWidthSrc As Long, ByVal nHeightSrc As Long, ByVal BLENDFUNCTION As Long) As Long
' 常量和结构体
Private Const TRANSPARENT = 1
Private Const AC_SRC_OVER = &H0
Private Type BLENDFUNCTION
BlendOp As Byte
BlendFlags As Byte
SourceConstantAlpha As Byte
AlphaFormat As Byte
End Type
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, Source As Any, ByVal Length As Long)
Private Sub AddTransparentWatermark( _
ByVal picSource As PictureBox, _
ByVal watermarkText As String, _
ByVal fontSize As Integer, _
ByVal textColor As Long, _
ByVal xPos As Long, _
ByVal yPos As Long, _
Optional ByVal alpha As Byte = 128)
Dim hdcTemp As Long, hBmpTemp As Long, hBmpOld As Long
Dim blendFunc As BLENDFUNCTION
Dim picWidth As Long, picHeight As Long
Dim lPtr As Long
CopyMemory lPtr, blendFunc, 4
' 确保以像素为单位计算尺寸
picSource.ScaleMode = vbPixels
picWidth = picSource.ScaleWidth
picHeight = picSource.ScaleHeight
' 创建临时DC和位图(初始为黑色背景)
hdcTemp = CreateCompatibleDC(picSource.hdc)
hBmpTemp = CreateCompatibleBitmap(picSource.hdc, picWidth, picHeight)
hBmpOld = SelectObject(hdcTemp, hBmpTemp)
' 清空临时DC为黑色 (后续混合时黑色区域透明)
BitBlt hdcTemp, 0, 0, picWidth, picHeight, 0, 0, 0, vbBlackness
' 在临时DC上绘制透明文本
SetBkMode hdcTemp, TRANSPARENT
SetTextColor hdcTemp, textColor
With picSource.Font
.Name = "Arial"
.Size = fontSize
.Bold = True
End With
TextOut hdcTemp, xPos, yPos, watermarkText, Len(watermarkText)
' 配置混合参数(关键修正点)
blendFunc.BlendOp = AC_SRC_OVER
blendFunc.BlendFlags = 0
blendFunc.SourceConstantAlpha = alpha ' 控制整体透明度
blendFunc.AlphaFormat = 0 ' 必须设为0
CopyMemory lPtr, blendFunc, 4
' 将水印混合到原始图片
AlphaBlend picSource.hdc, xPos, yPos, TextWidth(watermarkText), TextHeight(watermarkText), hdcTemp, xPos, yPos, TextWidth(watermarkText), TextHeight(watermarkText), lPtr
' 清理资源
SelectObject hdcTemp, hBmpOld
DeleteObject hBmpTemp
DeleteDC hdcTemp
picSource.Refresh
End Sub
Private Sub cmdAddWatermark_Click()
' 加载图片
' Picture1.Picture = LoadPicture("C:\test.jpg")
' 添加半透明水印(参数:PictureBox, 文字, 字体大小, 颜色, X, Y, 透明度)
AddTransparentWatermark Picture1, "Confidential123456789", 24, RGB(255, 255, 0), 100, 100, 128
' 保存为BMP(如需JPG/PNG需第三方库)
SavePicture Picture1.Image, "C:\watermarked.bmp"
End Sub


2026-01-03 07:53:04
广告
不感兴趣
开通SVIP免广告
  • cxy5636917
  • 简易程序
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 39回复贴,共2页
  • ,跳到 页  
<<返回vb吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示