不喜欢 ClearType 的看过来,教你完美随意开、关 ClearType ,解决系统文字发虚有毛边问题,被 ClearType 坑了的 Print 方法

目录

事由:

解决方法:

总结:


事由:

前两天做的那个通过 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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jessezappy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值