我正在尝试在VB6中模拟Color.ToArgb()网络函数。
在我的尝试中,我选择了红色。
在.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版本有什么不同?
发布于 2016-09-19 06:42:00
也许有一种更好的方法可以做到这一点,但这应该是可行的:
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发布于 2016-09-17 01:21:45
你的功能是正确的。
结果不同的原因是因为VB6和VB.NET中颜色值的字节顺序不同。VB6中的vbRed是一个等于255 (&H0000FF)的常量,而.NET的红色是&HFF0000。
如果你调用你的函数作为RGBToARGB(&HFF0000, 255),它会给出你所期望的结果。
这就是存在ColorTranslator.FromOle的原因。ColorTranslator.FromOle(vbRed)会给你Color.Red的。
https://stackoverflow.com/questions/39533374
复制相似问题