将RGB转换为ARGB

时间:2016-09-16 13:58:55

标签: vb.net vb6

我试图在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版本吗?

2 个答案:

答案 0 :(得分:2)

你的功能是正确的。

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

如果您将自己的功能称为RGBToARGB(&HFF0000, 255),则会提供您期望的结果。

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

答案 1 :(得分:1)

可能有更优化的方法来做到这一点,但这应该有效:

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