目录
事由:
前两天做的那个通过 GetDIBits 直接取得 PictureBox 的图像数据后直接保存为 PNG 图片的程序在不同的电脑上运行后,发现得到的图像不一样,因为是将时间字串直接通过 Print 方法打印到 PictureBox 后,再提取图像数据保存文件,其中将 PictureBox 的背景色当作透明色,保存得到透明的 PNG 图片,程序界面如下:
有一台保存出的 PNG 图片中,文字图像边缘清晰,背景色扣除的相当干净,图上只有文字本身的颜色:
因为前景色是白色,所以用系统自带的画图打开也是全部纯白的:
而另一台电脑就不一样,得到的图像有一圈毛刺的边缘:
用画图打开更是明显:
当时就纳闷了,是什么原因,问了不靠谱的 AI 说怀疑是 GetDIBits 受显卡驱动什么的影响,因为两台机器显卡的确不同,高配的一台没有毛刺低配的那台才有,于是又找了几台更低配的机器测试,发现得到的都是边缘清晰的,没有毛刺,这就诡异了,说明不是显卡的问题,也不应该是 GetDIBits 的问题,而是 PictureBox 中的图像数据本身就不一样,于是重新调整了一下程序,给它直接保存 PictureBox 的 image 为 BMP 图片,并且加上机器名字便于区分:
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long
Private Function GetComputerNameVB6() As String
Dim strComputerName As String * 255 ' 定义一个固定长度的字符串
Dim lngLen As Long ' 用于存储返回的字符数
Dim lngRet As Long ' 存储函数调用的结果
' 获取计算机名的实际长度
lngLen = 255
lngRet = GetComputerName(strComputerName, lngLen)
' 检查是否成功获取了计算机名
If ln