Const nMaxSaturation = 100   ' æå¤§è²å½©é¥±å度
Const nBlankNoisyDotOdds = 0.2 ' 空ç½å¤åªç¹ç
Const nColorNoisyDotOdds = 0.1 ' æè²å¤åªç¹ç
Const nCharCount = 4      ' 产ççå符个æ°
Const nPixelWidth = 20     ' å个å符ä½å¾ç宽度
Const nPixelHeight = 20     ' å个å符ä½å¾çé«åº¦
Const nColorHue = 220      ' æ¾ç¤ºéªè¯ç çè²è°(-1è¡¨ç¤ºéæºè²è°, -2表示ç°åº¦è²è°)
Const nAngleRandom = 10        ' è§åº¦éæºé
Const nLengthRandom = 10       ' é¿åº¦éæºé(ç¾åæ¯)
Const cCharSet = "0123456789"
' ææéªè¯ç çå符é
' 妿æ©å äºä¸è¾¹ç忝ç¢éåºï¼åå¯ä»¥ç¸åºæ©å è¿ä¸ªå符é
Dim Buf(), DigtalStr
Dim Lines(), LineCount
Dim CursorX, CursorY, DirX, DirY
Randomize
Call CreaalidCode("GetCode")
Sub CDGen_Reset()
' å¤ä½ç¢éç¬åç¯å¢åé
LineCount = 0
CursorX = 0
CursorY = 0
' åå§çå ç¬æ¹åæ¯åç´åä¸
DirX = 0
DirY = 1
End Sub
Sub CDGen_Clear()
' æ¸ ç©ºä½å¾éµå
Dim i, j
ReDim Buf(nPixelHeight - 1, nCharCount * nPixelWidth - 1)
For j = 0 To nPixelHeight - 1
For i = 0 To nCharCount * nPixelWidth - 1
Buf(j, i) = 0
Next
Next
End Sub
Sub CDGen_PSet(X, Y)
' å¨ä½å¾éµåä¸ç»ç¹
Buf(Y, X) = 1
End Sub
Sub CDGen_Line(X1, Y1, X2, Y2)
' å¨ä½å¾éµåä¸ç»çº¿
Dim DX, DY, DeltaT, i
DX = X2 - X1
DY = Y2 - Y1
If Abs(DX) > Abs(DY) Then DeltaT = Abs(DX) Else DeltaT = Abs(DY)
For i = 0 To DeltaT
CDGen_PSet X1 + DX * i / DeltaT, Y1 + DY * i / DeltaT
Next
End Sub
Sub CDGen_FowardDraw(nLength)
' æå½åå ç¬æ¹åç»å¶æå®é¿åº¦å¹¶ç§»å¨å ç¬ï¼æ£æ°è¡¨ç¤ºä»å·¦åå³/ä»ä¸åä¸ç»å¶ï¼è´æ°è¡¨ç¤ºä»å³åå·¦/ä»ä¸åä¸ç»å¶
nLength = Sgn(nLength) * Abs(nLength) * (1 - nLengthRandom / 100 + Rnd * nLenghtRandom * 2 / 100)
ReDim Preserve Lines(3, LineCount)
Lines(0, LineCount) = CursorX
Lines(1, LineCount) = CursorY
CursorX = CursorX + DirX * nLength
CursorY = CursorY + DirY * nLength
Lines(2, LineCount) = CursorX
Lines(3, LineCount) = CursorY
LineCount = LineCount + 1
End Sub
Sub CDGen_SetDirection(nAngle)
' ææå®è§åº¦è®¾å®ç»ç¬æ¹å, æ£æ°è¡¨ç¤ºç¸å¯¹å½åæ¹å顺æ¶éæ¹åæ¹åï¼è´æ°è¡¨ç¤ºç¸å¯¹å½åæ¹å鿶鿹忹å
Dim DX, DY
nAngle = Sgn(nAngle) * (Abs(nAngle) - nAngleRandom + Rnd * nAngleRandom * 2) / 180 * 3.1415926
DX = DirX
DY = DirY
DirX = DX * Cos(nAngle) - DY * Sin(nAngle)
DirY = DX * Sin(nAngle) + DY * Cos(nAngle)
End Sub
Sub CDGen_MoveToMiddle(nActionIndex, nPercent)
' å°ç»ç¬å æ ç§»å¨å°æå®å¨ä½çä¸é´ç¹ä¸ï¼nPercent为ä¸é´ä½ç½®çç¾åæ¯
Dim DeltaX, DeltaY
DeltaX = Lines(2, nActionIndex) - Lines(0, nActionIndex)
DeltaY = Lines(3, nActionIndex) - Lines(1, nActionIndex)
CursorX = Lines(0, nActionIndex) + Sgn(DeltaX) * Abs(DeltaX) * nPercent / 100
CursorY = Lines(1, nActionIndex) + Sgn(DeltaY) * Abs(DeltaY) * nPercent / 100
End Sub
Sub CDGen_MoveCursor(nActionIndex)
' å°ç»ç¬å æ ç§»å¨å°æå®å¨ä½çèµ·å§ç¹ä¸
CursorX = Lines(0, nActionIndex)
CursorY = Lines(1, nActionIndex)
End Sub
Sub CDGen_Close(nActionIndex)
' å°å½åå ç¬ä½ç½®ä¸æå®å¨ä½çèµ·å§ç¹éåå¹¶ç§»å¨å ç¬
ReDim Preserve Lines(3, LineCount)
Lines(0, LineCount) = CursorX
Lines(1, LineCount) = CursorY
CursorX = Lines(0, nActionIndex)
CursorY = Lines(1, nActionIndex)
Lines(2, LineCount) = CursorX
Lines(3, LineCount) = CursorY
LineCount = LineCount + 1
End Sub
Sub CDGen_CloseToMiddle(nActionIndex, nPercent)
' å°å½åå ç¬ä½ç½®ä¸æå®å¨ä½çä¸é´ç¹éåå¹¶ç§»å¨å ç¬ï¼nPercent为ä¸é´ä½ç½®çç¾åæ¯
Dim DeltaX, DeltaY
ReDim Preserve Lines(3, LineCount)
Lines(0, LineCount) = CursorX
Lines(1, LineCount) = CursorY
DeltaX = Lines(2, nActionIndex) - Lines(0, nActionIndex)
DeltaY = Lines(3, nActionIndex) - Lines(1, nActionIndex)
CursorX = Lines(0, nActionIndex) + Sgn(DeltaX) * Abs(DeltaX) * nPercent / 100
CursorY = Lines(1, nActionIndex) + Sgn(DeltaY) * Abs(DeltaY) * nPercent / 100
Lines(2, LineCount) = CursorX
Lines(3, LineCount) = CursorY
LineCount = LineCount + 1
End Sub
Sub CDGen_Flush(X0, Y0)
' æç §å½åçç»ç¬å¨ä½åºåç»å¶ä½å¾ç¹éµ
Dim MaxX, MinX, MaxY, MinY
Dim DeltaX, DeltaY, StepX, StepY, OffsetX, OffsetY
Dim i
MaxX = MinX = MaxY = MinY = 0
For i = 0 To LineCount - 1
If MaxX < Lines(0, i) Then MaxX = Lines(0, i)
If MaxX < Lines(2, i) Then MaxX = Lines(2, i)
If MinX > Lines(0, i) Then MinX = Lines(0, i)
If MinX > Lines(2, i) Then MinX = Lines(2, i)
If MaxY < Lines(1, i) Then MaxY = Lines(1, i)
If MaxY < Lines(3, i) Then MaxY = Lines(3, i)
If MinY > Lines(1, i) Then MinY = Lines(1, i)
If MinY > Lines(3, i) Then MinY = Lines(3, i)
Next
DeltaX = MaxX - MinX
DeltaY = MaxY - MinY
If DeltaX = 0 Then DeltaX = 1
If DeltaY = 0 Then DeltaY = 1
MaxX = MinX
MaxY = MinY
If DeltaX > DeltaY Then
StepX = (nPixelWidth - 2) / DeltaX
StepY = (nPixelHeight - 2) / DeltaX
OffsetX = 0
OffsetY = (DeltaX - DeltaY) / 2
Else
StepX = (nPixelWidth - 2) / DeltaY
StepY = (nPixelHeight - 2) / DeltaY
OffsetX = (DeltaY - DeltaX) / 2
OffsetY = 0
End If
For i = 0 To LineCount - 1
Lines(0, i) = Round((Lines(0, i) - MaxX + OffsetX) * StepX, 0)
If Lines(0, i) < 0 Then Lines(0, i) = 0
If Lines(0, i) >= nPixelWidth - 2 Then Lines(0, i) = nPixelWidth - 3
Lines(1, i) = Round((Lines(1, i) - MaxY + OffsetY) * StepY, 0)
If Lines(1, i) < 0 Then Lines(1, i) = 0
If Lines(1, i) >= nPixelHeight - 2 Then Lines(1, i) = nPixelHeight - 3
Lines(2, i) = Round((Lines(2, i) - MinX + OffsetX) * StepX, 0)
If Lines(2, i) < 0 Then Lines(2, i) = 0
If Lines(2, i) >= nPixelWidth - 2 Then Lines(2, i) = nPixelWidth - 3
Lines(3, i) = Round((Lines(3, i) - MinY + OffsetY) * StepY, 0)
If Lines(3, i) < 0 Then Lines(3, i) = 0
If Lines(3, i) >= nPixelHeight - 2 Then Lines(3, i) = nPixelHeight - 3
CDGen_Line Lines(0, i) + X0 + 1, Lines(1, i) + Y0 + 1, Lines(2, i) + X0 + 1, Lines(3, i) + Y0 + 1
Next
End Sub
Sub CDGen_Char(cChar, X0, Y0)
' 卿å®åæ å¤çææå®å符çä½å¾éµå
CDGen_Reset
Select Case cChar
Case "0"
CDGen_SetDirection -60                           ' éæ¶é60度(ç¸å¯¹äºåç´çº¿)
CDGen_FowardDraw -0.7                            ' åæ¹åç»å¶0.7个åä½
CDGen_SetDirection -60                           ' éæ¶é60度
CDGen_FowardDraw -0.7                            ' åæ¹åç»å¶0.7个åä½
CDGen_SetDirection 120                           ' 顺æ¶é120度
CDGen_FowardDraw 1.5                             ' ç»å¶1.5个åä½
CDGen_SetDirection -60                           ' éæ¶é60度
CDGen_FowardDraw 0.7                             ' ç»å¶0.7个åä½
CDGen_SetDirection -60                           ' 顺æ¶é120度
CDGen_FowardDraw 0.7                             ' ç»å¶0.7个åä½
CDGen_Close 0                                    ' å°éå½åç¬ä¸ç¬¬0ç¬(0å¼å§)
Case "1"
CDGen_SetDirection -90                           ' éæ¶é90度(ç¸å¯¹äºåç´çº¿)
CDGen_FowardDraw 0.5                             ' ç»å¶0.5个åä½
CDGen_MoveToMiddle 0, 50                         ' ç§»å¨ç»ç¬çä½ç½®å°ç¬¬0ç¬(0å¼å§)ç50%å¤
CDGen_SetDirection 90                            ' éæ¶é90度
CDGen_FowardDraw -1.4                            ' åæ¹åç»å¶1.4个åä½
CDGen_SetDirection 30                            ' éæ¶é30度
CDGen_FowardDraw 0.4                             ' ç»å¶0.4个åä½
Case "2"
CDGen_SetDirection 45                            ' 顺æ¶é45度(ç¸å¯¹äºåç´çº¿)
CDGen_FowardDraw -0.7                            ' åæ¹åç»å¶0.7个åä½
CDGen_SetDirection -120                          ' éæ¶é120度
CDGen_FowardDraw 0.4                             ' ç»å¶0.4个åä½
CDGen_SetDirection 60                            ' 顺æ¶é60度
CDGen_FowardDraw 0.6                             ' ç»å¶0.6个åä½
CDGen_SetDirection 60                            ' 顺æ¶é60度
CDGen_FowardDraw 1.6                             ' ç»å¶1.6个åä½
CDGen_SetDirection -135                          ' éæ¶é135度
CDGen_FowardDraw 1.0                             ' ç»å¶1.0个åä½
Case "3"
CDGen_SetDirection -90                           ' éæ¶é90度(ç¸å¯¹äºåç´çº¿)
CDGen_FowardDraw 0.8                             ' ç»å¶0.8个åä½
CDGen_SetDirection 135                           ' 顺æ¶é135度
CDGen_FowardDraw 0.8                             ' ç»å¶0.8个åä½
CDGen_SetDirection -120                          ' éæ¶é120度
CDGen_FowardDraw 0.6                             ' ç»å¶0.6个åä½
CDGen_SetDirection 80                            ' 顺æ¶é80度
CDGen_FowardDraw 0.5                             ' ç»å¶0.5个åä½
CDGen_SetDirection 60                            ' 顺æ¶é60度
CDGen_FowardDraw 0.5                             ' ç»å¶0.5个åä½
CDGen_SetDirection 60                            ' 顺æ¶é60度
CDGen_FowardDraw 0.5                             ' ç»å¶0.5个åä½
Case "4"
CDGen_SetDirection 20                            ' 顺æ¶é20度(ç¸å¯¹äºåç´çº¿)
CDGen_FowardDraw 0.8                             ' ç»å¶0.8个åä½
CDGen_SetDirection -110                          ' éæ¶é110度
CDGen_FowardDraw 1.2                             ' ç»å¶1.2个åä½
CDGen_MoveToMiddle 1, 60                         ' ç§»å¨ç»ç¬çä½ç½®å°ç¬¬1ç¬(0å¼å§)ç60%å¤
CDGen_SetDirection 90                            ' 顺æ¶é90度
CDGen_FowardDraw 0.7                             ' ç»å¶0.7个åä½
CDGen_MoveCursor 2                               ' ç§»å¨ç»ç¬å°ç¬¬2ç¬(0å¼å§)çå¼å§å¤
CDGen_FowardDraw -1.5                            ' åæ¹åç»å¶1.5个åä½
Case "5"
CDGen_SetDirection 90                            ' 顺æ¶é90度(ç¸å¯¹äºåç´çº¿)
CDGen_FowardDraw 1.0                             ' ç»å¶1.0个åä½
CDGen_SetDirection -90                           ' éæ¶é90度
CDGen_FowardDraw 0.8                             ' ç»å¶0.8个åä½
CDGen_SetDirection -90                           ' éæ¶é90度
CDGen_FowardDraw 0.8                             ' ç»å¶0.8个åä½
CDGen_SetDirection 30                            ' 顺æ¶é30度
CDGen_FowardDraw 0.4                             ' ç»å¶0.4个åä½
CDGen_SetDirection 60                            ' 顺æ¶é60度
CDGen_FowardDraw 0.4                             ' ç»å¶0.4个åä½
CDGen_SetDirection 30                            ' 顺æ¶é30度
CDGen_FowardDraw 0.5                             ' ç»å¶0.5个åä½
CDGen_SetDirection 60                            ' 顺æ¶é60度
CDGen_FowardDraw 0.8                             ' ç»å¶0.8个åä½
Case "6"
CDGen_SetDirection -60                           ' éæ¶é60度(ç¸å¯¹äºåç´çº¿)
CDGen_FowardDraw -0.7                            ' åæ¹åç»å¶0.7个åä½
CDGen_SetDirection -60                           ' éæ¶é60度
CDGen_FowardDraw -0.7                            ' åæ¹åç»å¶0.7个åä½
CDGen_SetDirection 120                           ' 顺æ¶é120度
CDGen_FowardDraw 1.5                             ' ç»å¶1.5个åä½
CDGen_SetDirection 120                           ' 顺æ¶é120度
CDGen_FowardDraw -0.7                            ' åæ¹åç»å¶0.7个åä½
CDGen_SetDirection 120                           ' 顺æ¶é120度
CDGen_FowardDraw 0.7                             ' ç»å¶0.7个åä½
CDGen_SetDirection 120                           ' 顺æ¶é120度
CDGen_FowardDraw -0.7                            ' åæ¹åç»å¶0.7个åä½
CDGen_SetDirection 120                           ' 顺æ¶é120度
CDGen_FowardDraw 0.5                             ' ç»å¶0.5个åä½
CDGen_CloseToMiddle 2, 50                        ' å°å½åç»ç¬ä½ç½®ä¸ç¬¬2ç¬(0å¼å§)ç50%å¤å°é
Case "7"
CDGen_SetDirection 180                           ' 顺æ¶é180度(ç¸å¯¹äºåç´çº¿)
CDGen_FowardDraw 0.3                             ' ç»å¶0.3个åä½
CDGen_SetDirection 90                            ' 顺æ¶é90度
CDGen_FowardDraw 0.9                             ' ç»å¶0.9个åä½
CDGen_SetDirection 120                           ' 顺æ¶é120度
CDGen_FowardDraw 1.3                             ' ç»å¶1.3个åä½
Case "8"
CDGen_SetDirection -60                           ' éæ¶é60度(ç¸å¯¹äºåç´çº¿)
CDGen_FowardDraw -0.8                            ' åæ¹åç»å¶0.8个åä½
CDGen_SetDirection -60                           ' éæ¶é60度
CDGen_FowardDraw -0.8                            ' åæ¹åç»å¶0.8个åä½
CDGen_SetDirection 120                           ' 顺æ¶é120度
CDGen_FowardDraw 0.8                             ' ç»å¶0.8个åä½
CDGen_SetDirection 110                           ' 顺æ¶é110度
CDGen_FowardDraw -1.5                            ' åæ¹åç»å¶1.5个åä½
CDGen_SetDirection -110                          ' éæ¶é110度
CDGen_FowardDraw 0.9                             ' ç»å¶0.9个åä½
CDGen_SetDirection 60                            ' 顺æ¶é60度
CDGen_FowardDraw 0.8                             ' ç»å¶0.8个åä½
CDGen_SetDirection 60                            ' 顺æ¶é60度
CDGen_FowardDraw 0.8                             ' ç»å¶0.8个åä½
CDGen_SetDirection 60                            ' 顺æ¶é60度
CDGen_FowardDraw 0.9                             ' ç»å¶0.9个åä½
CDGen_SetDirection 70                            ' 顺æ¶é70度
CDGen_FowardDraw 1.5                            ' ç»å¶1.5个åä½
CDGen_Close 0                                    ' å°éå½åç¬ä¸ç¬¬0ç¬(0å¼å§)
Case "9"
CDGen_SetDirection 120                           ' éæ¶é60度(ç¸å¯¹äºåç´çº¿)
CDGen_FowardDraw -0.7                            ' åæ¹åç»å¶0.7个åä½
CDGen_SetDirection -60                           ' éæ¶é60度
CDGen_FowardDraw -0.7                            ' åæ¹åç»å¶0.7个åä½
CDGen_SetDirection -60                           ' 顺æ¶é120度
CDGen_FowardDraw -1.5                             ' ç»å¶1.5个åä½
CDGen_SetDirection -60                           ' 顺æ¶é120度
CDGen_FowardDraw -0.7                            ' åæ¹åç»å¶0.7个åä½
CDGen_SetDirection -60                           ' 顺æ¶é120度
CDGen_FowardDraw -0.7                             ' ç»å¶0.7个åä½
CDGen_SetDirection 120                           ' 顺æ¶é120度
CDGen_FowardDraw 0.7                            ' åæ¹åç»å¶0.7个åä½
CDGen_SetDirection -60                           ' 顺æ¶é120度
CDGen_FowardDraw 0.5                             ' ç»å¶0.5个åä½
CDGen_CloseToMiddle 2, 50                        ' å°å½åç»ç¬ä½ç½®ä¸ç¬¬2ç¬(0å¼å§)ç50%å¤å°é
' 以ä¸ä¸ºåæ¯çç¢éå¨ä½ï¼æå ´è¶£çå¯ä»¥ç»§ç»
Case "A"
CDGen_SetDirection -(Rnd * 20 + 150)             ' éæ¶é150-170度(ç¸å¯¹äºåç´çº¿)
CDGen_FowardDraw Rnd * 0.2 + 1.1                 ' ç»å¶1.1-1.3个åä½
CDGen_SetDirection Rnd * 20 + 140                ' 顺æ¶é140-160度
CDGen_FowardDraw Rnd * 0.2 + 1.1                 ' ç»å¶1.1-1.3个åä½
CDGen_MoveToMiddle 0, 30                         ' ç§»å¨ç»ç¬çä½ç½®å°ç¬¬1ç¬(0å¼å§)ç30%å¤
CDGen_CloseToMiddle 1, 70                        ' å°å½åç»ç¬ä½ç½®ä¸ç¬¬1ç¬(0å¼å§)ç70%å¤å°é
Case "B"
CDGen_SetDirection -(Rnd * 20 + 50)              ' éæ¶é50-70度(ç¸å¯¹äºåç´çº¿)
CDGen_FowardDraw Rnd * 0.4 + 0.8                 ' ç»å¶0.8-1.2个åä½
CDGen_SetDirection Rnd * 20 + 110                ' 顺æ¶é110-130度
CDGen_FowardDraw Rnd * 0.2 + 0.6                 ' ç»å¶0.6-0.8个åä½
CDGen_SetDirection -(Rnd * 20 + 110)             ' éæ¶é110-130度
CDGen_FowardDraw Rnd * 0.2 + 0.6                 ' ç»å¶0.6-0.8个åä½
CDGen_SetDirection Rnd * 20 + 110                ' 顺æ¶é110-130度
CDGen_FowardDraw Rnd * 0.4 + 0.8                 ' ç»å¶0.8-1.2个åä½
CDGen_Close 0                                    ' å°éå½åç¬ä¸ç¬¬1ç¬(0å¼å§)
Case "C"
CDGen_SetDirection -60                           ' éæ¶é60度(ç¸å¯¹äºåç´çº¿)
CDGen_FowardDraw -0.7                            ' åæ¹åç»å¶0.7个åä½
CDGen_SetDirection -60                           ' éæ¶é60度
CDGen_FowardDraw -0.7                            ' åæ¹åç»å¶0.7个åä½
CDGen_SetDirection 120                           ' 顺æ¶é120度
CDGen_FowardDraw 1.5                             ' ç»å¶1.5个åä½
CDGen_SetDirection 120                           ' 顺æ¶é120度
CDGen_FowardDraw -0.7                            ' åæ¹åç»å¶0.7个åä½
CDGen_SetDirection 120                           ' 顺æ¶é120度
CDGen_FowardDraw 0.7                             ' ç»å¶0.7个åä½
End Select
CDGen_Flush X0, Y0
End Sub
Sub CDGen_Blur()
' 对产ççä½å¾è¿è¡æåå¤ç
Dim i, j
For j = 1 To nPixelHeight - 2
For i = 1 To nCharCount * nPixelWidth - 2
If Buf(j, i) = 0 Then
If ((Buf(j, i - 1) Or Buf(j + 1, i)) And 1) <> 0 Then
' 妿å½åç¹æ¯ç©ºç½ç¹ï¼ä¸ä¸ä¸å·¦å³å个ç¹ä¸æä¸ä¸ªç¹æ¯æè²ç¹ï¼å该ç¹åæåå¤ç
Buf(j, i) = 2
End If
End If
Next
Next
End Sub
Sub CDGen_NoisyDot()
' 对产ççä½å¾è¿è¡åªç¹å¤ç
Dim i, j, NoisyDot, CurDot
For j = 0 To nPixelHeight - 1
For i = 0 To nCharCount * nPixelWidth - 1
If Buf(j, i) <> 0 Then
NoisyDot = Int(Rnd * Rnd * nMaxSaturation)
Select Case nColorNoisyDotOdds
Case 0
CurDot = nMaxSaturation
Case 1
CurDot = 0
Case Else
CurDot = NoisyDot
End Select
If Rnd < nColorNoisyDotOdds Then Buf(j, i) = CurDot Else Buf(j, i) = nMaxSaturation
Else
NoisyDot = Int(Rnd * nMaxSaturation)
Select Case nBlankNoisyDotOdds
Case 0
CurDot = 0
Case 1
CurDot = nMaxSaturation
Case Else
CurDot = NoisyDot
End Select
If Rnd < nBlankNoisyDotOdds Then Buf(j, i) = CurDot Else Buf(j, i) = 0
End If
Next
Next
End Sub
Sub CDGen()
' çæä½å¾éµå
Dim i, Ch
DigtalStr = ""
CDGen_Clear
For i = 0 To nCharCount - 1
Ch = Mid(cCharSet, Int(Rnd * Len(cCharSet)) + 1, 1)
DigtalStr = DigtalStr + Ch
CDGen_Char Ch, i * nPixelWidth, 0
Next
CDGen_Blur
CDGen_NoisyDot
End Sub
Function HSBToRGB(vH, vS, vB)
' å°é¢è²å¼ç±HSB转æ¢ä¸ºRGB
Dim aRGB(3), RGB1st, RGB2nd, RGB3rd
Dim nH, nS, nB
Dim lH, nF, nP, nQ, nT
vH = (vH Mod 360)
If vS > 100 Then
vS = 100
ElseIf vS < 0 Then
vS = 0
End If
If vB > 100 Then
vB = 100
ElseIf vB < 0 Then
vB = 0
End If
If vS > 0 Then
nH = vH / 60
nS = vS / 100
nB = vB / 100
lH = Int(nH)
nF = nH - lH
nP = nB * (1 - nS)
nQ = nB * (1 - nS * nF)
nT = nB * (1 - nS * (1 - nF))
Select Case lH
Case 0
aRGB(0) = nB * 255
aRGB(1) = nT * 255
aRGB(2) = nP * 255
Case 1
aRGB(0) = nQ * 255
aRGB(1) = nB * 255
aRGB(2) = nP * 255
Case 2
aRGB(0) = nP * 255
aRGB(1) = nB * 255
aRGB(2) = nT * 255
Case 3
aRGB(0) = nP * 255
aRGB(1) = nQ * 255
aRGB(2) = nB * 255
Case 4
aRGB(0) = nT * 255
aRGB(1) = nP * 255
aRGB(2) = nB * 255
Case 5
aRGB(0) = nB * 255
aRGB(1) = nP * 255
aRGB(2) = nQ * 255
End Select
Else
aRGB(0) = (vB * 255) / 100
aRGB(1) = aRGB(0)
aRGB(2) = aRGB(0)
End If
HSBToRGB = ChrB(Round(aRGB(2), 0)) & ChrB(Round(aRGB(1), 0)) & ChrB(Round(aRGB(0), 0))
End Function
Sub CreaalidCode(pSN)
Dim i, j, CurColorHue
' ç¦æ¢ç¼å
Response.Expires = -9999
Response.AddHeader "pragma", "no-cache"
Response.AddHeader "cache-ctrol", "no-cache"
Response.ContentType = "image/bmp"
Call CDGen
Session(pSN) = DigtalStr 'è®°å½å ¥Session
Dim PicWidth, PicHeight, FileSize, PicDataSize
PicWidth = nCharCount * nPixelWidth
PicHeight = nPixelHeight
PicDataSize = PicWidth * PicHeight * 3
FileSize = PicDataSize + 54
' è¾åºBMPæä»¶ä¿¡æ¯å¤´
Response.BinaryWrite ChrB(66) & ChrB(77) & _
ChrB(FileSize Mod 256) & ChrB((FileSize \ 256) Mod 256) & ChrB((FileSize \ 256 \ 256) Mod 256) & ChrB(FileSize \ 256 \ 256 \ 256) & _
ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & _
ChrB(54) & ChrB(0) & ChrB(0) & ChrB(0)
' è¾åºBMPä½å¾ä¿¡æ¯å¤´
Response.BinaryWrite ChrB(40) & ChrB(0) & ChrB(0) & ChrB(0) & _
ChrB(PicWidth Mod 256) & ChrB((PicWidth \ 256) Mod 256) & ChrB((PicWidth \ 256 \ 256) Mod 256) & ChrB(PicWidth \ 256 \ 256 \ 256) & _
ChrB(PicHeight Mod 256) & ChrB((PicHeight \ 256) Mod 256) & ChrB((PicHeight \ 256 \ 256) Mod 256) & ChrB(PicHeight \ 256 \ 256 \ 256) & _
ChrB(1) & ChrB(0) & _
ChrB(24) & ChrB(0) & _
ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & _
ChrB(PicDataSize Mod 256) & ChrB((PicDataSize \ 256) Mod 256) & ChrB((PicDataSize \ 256 \ 256) Mod 256) & ChrB(PicDataSize \ 256 \ 256 \ 256) & _
ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) & _
ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) & _
ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & _
ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0)
' éç¹è¾åºä½å¾éµå
If nColorHue = -1 Then
CurColorHue = Int(Rnd * 360)
ElseIf nColorHue = -2 Then
CurColorHue = 0
Else
CurColorHue = nColorHue
End If
For j = 0 To nPixelHeight - 1
For i = 0 To Len(DigtalStr) * nPixelWidth - 1
If nColorHue = -2 Then
Response.BinaryWrite HSBToRGB(CurColorHue, 0, 100 - Buf(nPixelHeight - 1 - j, i))
Else
Response.BinaryWrite HSBToRGB(CurColorHue, Buf(nPixelHeight - 1 - j, i), 100)
End If
Next
Next
End Sub
%>