将RGB转换为ARGB



我正在尝试在VB6中模拟Color.ToArgb() Net函数。

对于我的尝试,我选择了红色。

在。net中我得到的结果是

Color.Red.ToArgb() = -65536

然而,我不能在VB6中复制这个。

函数RGBToARGB(vbRed, 255)返回-16776961

Public Function RGBToARGB(ByVal uColor As Long, ByVal uAlpha As Integer) As Long
    Dim newColor As Long
    ' To add an Alpha channel to the RGB, simply
    If uAlpha > 127 Then
       newColor = uColor Or ((uAlpha - 128) * &H1000000 Or &H80000000)
    Else
       newColor = uColor Or (uAlpha * &H1000000)
    End If
    RGBToARGB = newColor
End Function

有没有人看到我做错了什么/不同于。net版本?

可能有一种更优的方法来做到这一点,但这应该工作:

Function RGB24ToARGB(ByVal RGB24 As Long, ByVal Alpha As Byte) As Long
    RGB24ToARGB = CLng(Alpha And Not &H80) * &H1000000
    If Alpha And &H80 Then RGB24ToARGB = RGB24ToARGB Or &H80000000
    RGB24ToARGB = RGB24ToARGB _
               Or (RGB24 And &HFF&) * &H10000 _
               Or (RGB24 And &HFF00&) _
               Or (RGB24 And &HFF0000)  &H10000
End Function

你的函数是正确的。

结果不同的原因是因为颜色值的字节顺序在VB6和VB.NET中不同。VB6中的vbRed是等于255 (&H0000FF)的常数,. net的红色为&HFF0000

如果你调用你的函数作为RGBToARGB(&HFF0000, 255),它将给出你期望的结果。

这就是ColorTranslator.FromOle存在的原因。ColorTranslator.FromOle(vbRed)会给你Color.Red

最新更新