Please enable Javascript to view the contents

GDI+_VB6_ARGB

 ·  ☕ 2 分钟

在写一个用GDI+代替VB的Line函数的方法时,遇到了一个问题。

GdipCreateSolidFill

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17

参数

color

[in]ARGB颜色,指定此实体画笔的初始颜色。

brush

[out]指向接收到新创建的SolidBrush对象的指针的变量的指针

返回值

如果函数成功,则返回Ok,它是状态枚举的一个元素。

如果函数失败,它返回状态枚举的其他元素之一。 

 

在得到ARGB值这一点出现了问题。

我当时以为很简单的HEX(ARGB)就能解决结果我就错了。

查阅了很多时间,才知道原来要分开来转换。

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

1 ARGB有四个值

2 

3 透明度 红色值 绿色值 蓝色值

4 

5 于是我做了一个函数来解决:<br />

```python

Public Function ARGB(alpha As Integer, red As Integer, green As Integer, blue As Integer) As Long

'ARGB(透明度,红色,绿色,蓝色)

    If alpha > 255 Or red > 255 Or green > 255 Or blue > 255 Then

    '大于255 返回0

    ARGB = 0: Exit Function

    End If

    Dim S_a As String, S_r As String, S_g As String, S_b As String, S_16 As String

    S_a = Hex(alpha): S_r = Hex(red): S_g = Hex(green): S_b = Hex(blue)

'由于十六进制ARGB是以两位数为一个值的。

'当字符个数为1时前面加0补充

    If Len(S_a) < 2 Then S_a = "0" &amp; S_a

    If Len(S_r) < 2 Then S_r = "0" &amp; S_r

    If Len(S_g) < 2 Then S_g = "0" &amp; S_g

    If Len(S_b) < 2 Then S_b = "0" &amp; S_b

    S_16 = "&amp;H" &amp; S_a &amp; S_r &amp; S_g &amp; S_b

'ARGB=&amp;H FFFF FFFF

ARGB = Val(S_16)

End Function

 

虽然很简单的一个东西,但是百度上对ARGB的介绍极少,导致浪费了我不少的时间,所以建一篇帖子谨记。

 

 

 


  

 


&nbsp;
分享

风陵
作者
风陵
A Student | Java Dev