Pídale a un profesional que lo codifique en C#
Aquí tienes un código de verificación hecho en VB: puedes usarlo como plantilla para escribirlo
lt
Response.expires=-1
p>
Response.AddHeader "pragma", "no-cache"
Response.AddHeader "cache-control", "no-store"
Const nMaxSaturation = 100 ' Saturación máxima de color
Const nBlankNoisyDotOdds = 0,2 'Tasa de ruido en blanco
Const nColorNoisyDotOdds = 0,1 'Tasa de ruido de color
Const nCharCount = 5 'Número de caracteres generados Número
Const nPixelWidth = 20 'Ancho de un mapa de bits de un solo carácter
Const nPixelHeight = 20 'Alto de un mapa de bits de un solo carácter
Const nColorHue = 220 ' Mostrar el tono del código de verificación (-1 representa un tono aleatorio, -2 representa un tono en escala de grises)
Const nAngleRandom = 10 ' Cantidad aleatoria de ángulo
Const nLengthRandom = 10 ' Cantidad aleatoria de longitud (porcentaje)
Const cCharSet = "0123456789ABC"
' El conjunto de caracteres que constituye el código de verificación si se expande la siguiente biblioteca de vectores de letras
Dim Buf; (), DigtalStr
Dim Lines(), LineCount
Dim CursorX, CursorY, DirX, DirY
Aleatorio
Llamar a CreatValidCode( "GetCode")
Sub CDGen_Reset()
' Restablecer lápiz vectorial y variables de entorno
LineCount = 0
CursorX = 0
CursorY = 0
' La dirección inicial del lápiz óptico es verticalmente hacia abajo
DirX = 0
DirY = 1
End Sub
Sub CDGen_Clear()
' Borrar matriz de mapa de bits
Dim i, j
ReDim Buf(nPixelHeight - 1 , nCharCount * nPixelWidth - 1)
Para j = 0 a nPixelHeight - 1
Para i = 0 a nCharCount * nPixelWidth - 1
Buf(j, i) = 0
Siguiente
Siguiente
Fin Sub
Sub CDGen_PSet(X, Y)
' en su lugar Dibuja puntos en la matriz del gráfico
Buf(Y, X) = 1
End Sub
Sub CDGen_Line(X1, Y1, X2, Y2 )
' Dibujar líneas en una matriz de mapa de bits
D
im DX, DY, DeltaT, i
DX = X2 - X1
DY = Y2 - Y1
Si Abs(DX) gt; Entonces DeltaT = Abs(DX) Si no DeltaT = Abs(DY)
Para i = 0 a DeltaT
CDGen_PSet X1 DX*i/DeltaT, Y1 DY*i/DeltaT p> p>
Siguiente
End Sub
Sub CDGen_FowardDraw(nLength)
' Dibuja la longitud especificada de acuerdo con la dirección actual del lápiz y mueve el Un número positivo significa dibujar de izquierda a derecha/de arriba a abajo, un número negativo significa dibujar de derecha a izquierda/de abajo hacia arriba
nLongitud = Sgn(nLongitud) * Abs(nLongitud) * (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
Líneas(3, LineCount) = CursorY
LineCount = LineCount 1
End Sub
Sub CDGen_SetDirection(nAngle) p>
' Establecer de acuerdo con el ángulo especificado Dirección del pincel, un número positivo significa cambiar la dirección en el sentido de las agujas del reloj con respecto a la dirección actual, un número negativo significa cambiar la dirección en sentido antihorario con respecto a la dirección actual
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 )
' Mueve el cursor del lápiz al punto medio de la acción especificada, nPercent es el porcentaje de la posición media
Dim DeltaX, DeltaY
DeltaX = Líneas(2, nActionIndex) - Líneas(0, nActionIndex)
DeltaY = Líneas(3, nActionIndex) - Líneas( 1, nActionIndex)
C
ursorX = 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)
' Mueve el cursor del pincel al punto inicial de la acción especificada
CursorX = Líneas ( 0, nActionIndex)
CursorY = Lines(1, nActionIndex)
End Sub
Sub CDGen_Close(nActionIndex)
' Will el actual Cierre la posición del lápiz óptico con el punto inicial de la acción especificada y mueva el lápiz óptico
ReDim Preserve Lines(3, LineCount)
Lines(0, LineCount) = CursorX
Líneas (1, LineCount) = CursorY
CursorX = Líneas(0, nActionIndex)
CursorY = Líneas(1, nActionIndex)
Líneas(2, LineCount) = CursorX
Líneas(3, LineCount) = CursorY
LineCount = LineCount 1
End Sub
Sub CDGen_CloseToMiddle(nActionIndex, nPercent )
' Cierra el punto medio entre la posición actual del lápiz óptico y la acción especificada y mueve el lápiz óptico, nPercent es el porcentaje de la posición media
Dim DeltaX, DeltaY
ReDim Preserve Lines(3, LineCount)
Lines(0, LineCount) = CursorX
Lines(1, LineCount) = CursorY
DeltaX = Líneas(2, nActionIndex ) - Líneas(0, nActionIndex)
DeltaY = Líneas(3, nActionIndex) - Líneas(1, nActionIndex)
CursorX = Líneas(0, nActionIndex) Sgn(DeltaX) * Abs(DeltaX) * nPorcentaje / 100
CursorY = Líneas(1, nActionIndex) Sgn(DeltaY) * Abs(DeltaY) * nPorcentaje / 100
Líneas(2, LineCount) = CursorX
Líneas(3, LineCount) = CursorY
LineCount = LineCount 1
Fin Sub
>
Sub CDGen_Flush(X0, Y0)
' Dibuja una red de mapa de bits según la secuencia de acción del pincel actual
Dim MaxX, MinX, MaxY, MinY
Atenuar DeltaX, DeltaY, StepX, StepY, OffsetX, OffsetY
Atenuar i
MaxX = MinX = MaxY = MinY = 0
Para i = 0 A LineCount - 1
Si MaxX Líneas(0, i) Entonces MaxX = Líneas(0, i)
Si MaxX Líneas(2, i) Entonces MaxX = Líneas; (2, i)
Si MinX gt; Líneas(0, i) Entonces MinX = Líneas(0, i)
Si MinX Líneas(2, i) Entonces MinX; = Líneas(2, i)
If MaxY Líneas(1, i) Entonces MaxY = Líneas(1, i)
Si MaxY Líneas(3, i ) Entonces MaxY = Líneas(3, i)
Si MinY gt; i) Entonces MinY = Líneas(3, i)
Siguiente
DeltaX = MaxX - MinX
DeltaY = MaxY - MinY
Si DeltaX = 0 Entonces DeltaX = 1
Si DeltaY = 0 Entonces DeltaY = 1
MaxX = MinX
MaxY = MinY
Si DeltaX gt; DeltaY Entonces
StepX = (nPixelWidth - 2) / DeltaX
StepY = (nPixelHeight - 2) / DeltaX
OffsetX = 0 < / p>
OffsetY = (DeltaX - DeltaY) / 2
Else
StepX = (nPixelWidth - 2) / DeltaY
StepY = (nPixelHeight - 2) / DeltaY
OffsetX = (DeltaY - DeltaX) / 2
OffsetY = 0
Fin Si
For i = 0 A LineCount - 1
Líneas(0, i) = Ronda((Líneas(0, i) - MaxX OffsetX) * PasoX, 0)
Si Líneas(0, i ) lt; 0 Entonces Líneas(0, i) = 0
Si Líneas(0, i) gt = nPixelWidth - 2 Entonces Lin;
es(0, i) = nPixelWidth - 3
Lines(1, i) = Round((Lines(1, i) - MaxY OffsetY) * StepY, 0)
If Líneas(1, i) <0 Entonces Líneas(1, i) = 0
Si Líneas(1, i)
Líneas(2, i) = Ronda((Líneas( 2, i) - MinX OffsetX) * StepX, 0)
Si Líneas(2, i) lt; Entonces Líneas (2, i) = 0
Si Líneas(2; , i) gt; = nPixelWidth - 2 Then Lines(2, i) = nPixelWidth - 3
Lines(3, i ) = Round((Lines(3, i) - MinY OffsetY) * StepY, 0)
Si Líneas(3, i) lt; 0 Entonces Líneas(3, i) = 0
Si Líneas(3, i) >= nPixelHeight - 2 Entonces Líneas( 3, i) = nPixelHeight - 3
CDGen_Line Líneas(0, i) X0 1, Líneas(1, i) Y0 1, Líneas(2, i) X0 1, Líneas(3, i) Y0 1
Siguiente
End Sub
Sub CDGen_Char(cChar, X0 , Y0)
' Genera una matriz de mapa de bits de caracteres especificados en coordenadas especificadas
CDGen_Reset
Seleccione Case cChar
Case "0 "
CDGen_SetDirection -60 ' 60 grados en sentido antihorario (en relación con la vertical línea)
CDGen_FowardDraw -0.7 ' Dibuja 0.7 unidades en la dirección opuesta
CDGen_SetDirection -60 ' 60 grados en sentido antihorario
CDGen_FowardDraw -0.7 'Dibuja 0.7 unidades en la dirección opuesta
CDGen_SetDirection 120' 120 grados en sentido horario
CDGen_FowardDraw 1.5' Dibujar 1.5 unidades
CDGen_SetDirection -60' 60 grados en sentido antihorario
CDGen_FowardDraw 0.7 ' Dibujar 0.7 unidades
CDGen_SetDirection -60 ' 120 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 0.7 'Dibujar 0.7 unidades
CDGen_Close 0 'Cerrar el lápiz actual y el lápiz 0 (comenzando en 0)
Caso "1"
CDGen_SetDirection -90 ' 90 grados en sentido antihorario (en relación con la vertical)
CDGen_
FowardDraw 0.5' Dibujar 0.5 unidades
CDGen_MoveToMiddle 0, 50' Mueve la posición del pincel a la posición 50 del trazo 0 (comenzando desde 0)
CDGen_SetDirection 90' En sentido antihorario 90 grados
p>CDGen_FowardDraw -1.4 'Dibuja 1.4 unidades en la dirección opuesta
CDGen_SetDirection 30 '30 grados en sentido antihorario
CDGen_FowardDraw 0.4 'Dibuja 0.4 unidades
Caso "2"
CDGen_SetDirection 45 ' 45 grados en el sentido de las agujas del reloj (en relación con la línea vertical)
CDGen_FowardDraw -0.7 ' Dibuja 0,7 unidades en la dirección opuesta
CDGen_SetDirection - 120 ' 120 grados en sentido antihorario
CDGen_FowardDraw 0.4 ' Dibujar 0.4 unidades
CDGen_SetDirection 60 ' 60 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 0.6 ' Dibujar 0.6 unidades p>
p>
CDGen_SetDirection 60' 60 grados en sentido horario
CDGen_FowardDraw 1.6' Dibujar 1.6 unidades
CDGen_SetDirection -135' 135 grados en sentido antihorario
CDGen_FowardDraw 1.0 ' Dibujar 1,0 unidades
Caso "3"
CDGen_SetDirection -90 ' 90 grados en sentido antihorario (en relación con la línea vertical)
CDGen_FowardDraw 0.8 ' Dibujar 0.8 unidades Unidades
CDGen_SetDirection 135 '135 grados en sentido horario
CDGen_FowardDraw 0.8 'Dibujo 0.8 unidades
CDGen_SetDirection -120 '120 grados en sentido antihorario
CDGen_FowardDraw 0.6' Dibujar 0.6 unidades
CDGen_SetDirection 80' 80 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 0.5' Dibujar 0.5 unidades
CDGen_SetDirection 60' 60 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 0.5' Dibujar 0.5 unidades
CDGen_SetDirection 60' Sentido horario 60 grados
CDGen_FowardDraw 0.5' Dibujar 0.5 unidades
Caso "4"
CDGen_SetDirection 20 ' 20 grados en el sentido de las agujas del reloj (en relación con la línea vertical)
CDGen_FowardDraw 0.8 ' Dibujar 0.8 unidades
CDGen_SetDirection -110 ' En el sentido contrario a las agujas del reloj 110 grados
CDGen_FowardDraw 1.2 'Dibuja 1.2 unidades
CDGen_MoveToMiddle 1, 60 'Mueve la posición del pincel a la posición 60 del primer trazo (comenzando en 0)
CDGen_S
etDirection 90 '90 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 0.7 'Dibuja 0.7 unidades
CDGen_MoveCursor 2 'Mueve el pincel al comienzo del segundo trazo (comenzando en 0)
CDGen_FowardDraw -1.5 ' Dibuja 1,5 unidades en la dirección opuesta
Caso "5"
CDGen_SetDirection 90 ' 90 grados en el sentido de las agujas del reloj (en relación con la línea vertical)
CDGen_FowardDraw 1.0 'Dibuja 1.0 unidades
CDGen_SetDirection -90 '90 grados en sentido antihorario
CDGen_FowardDraw 0.8 'Dibuja 0,8 unidades
CDGen_SetDirection -90 '90 grados en sentido antihorario
CDGen_FowardDraw 0.8' Dibujar 0.8 unidades
CDGen_SetDirection 30' 30 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 0.4' Dibujar 0.4 unidades
CDGen_SetDirection 60' 60 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 0.4 ' Dibujar 0.4 unidades
CDGen_SetDirection 30 ' 30 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 0.5 ' Dibujar 0.5 unidades
p>
CDGen_SetDirection 60 ' 60 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 0.8 ' Dibujar 0.8 unidades
Caso "6"
CDGen_SetDirection -60 ' En el sentido contrario a las agujas del reloj 60 grados (en relación con la línea vertical )
CDGen_FowardDraw -0.7 ' Dibuja 0.7 unidades en la dirección opuesta
CDGen_SetDirection -60 ' 60 grados en sentido antihorario
CDGen_FowardDraw -0.7 ' Dibuja 0.7 unidades en la dirección opuesta dirección
CDGen_SetDirection 120' 120 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 1.5' Dibujar 1.5 unidades
CDGen_SetDirection 120' 120 grados en el sentido de las agujas del reloj
CDGen_FowardDraw -0.7 'Dibuja 0,7 unidades en la dirección opuesta
CDGen_SetDirection 120 '120 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 0.7 'Dibuja 0,7 unidades
CDGen_SetDirection 120 ' 120 grados en el sentido de las agujas del reloj
CDGen_FowardDraw -0.7 ' Dibuja 0.7 unidades en la dirección opuesta
CDGen_SetDirection 120 ' 120 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 0.5 ' Dibuja 0.5 unidades
CDGen_CloseToMiddle 2 , 50' Cierra la posición actual del pincel a 50 del segundo trazo (comenzando desde 0)
Caso "7"
CDGen_SetDi
reacción 180 '180 grados en el sentido de las agujas del reloj (en relación con la línea vertical)
CDGen_FowardDraw 0.3 'Dibujar 0.3 unidades
CDGen_SetDirection 90 '90 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 0.9 'Dibujar 0.9 unidades
CDGen_SetDirection 120' 120 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 1.3' Dibujar 1.3 unidades
Caso "8"
CDGen_SetDirection -60' 60 grados en sentido antihorario (en relación con la línea vertical)
CDGen_FowardDraw -0.8 ' Dibuja 0,8 unidades en la dirección opuesta
CDGen_SetDirection -60 ' 60 grados en sentido antihorario
CDGen_FowardDraw -0.8 'Dibuja 0.8 unidades en la dirección opuesta
CDGen_SetDirection 120 '120 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 0.8 'Dibuja 0.8 unidades
CDGen_SetDirection 110 '110 grados en el sentido de las agujas del reloj
CDGen_FowardDraw -1.5 'Dibuja 1.5 unidades en la dirección opuesta
CDGen_SetDirection -110 '110 grados en sentido antihorario
CDGen_FowardDraw 0.9 'Dibuja 0.9 unidades
CDGen_SetDirection 60 ' 60 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 0.8 ' Dibujar 0.8 unidades
CDGen_SetDirection 60 ' 60 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 0.8 ' Dibujar 0.8 unidades
CDGen_SetDirection 60' 60 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 0.9' Dibujar 0.9 unidades
CDGen_SetDirection 70' 70 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 1.5' Dibujar 1.5 unidades p>
CDGen_Close 0 'Cierra el lápiz actual y el lápiz 0 (comenzando en 0)
Caso "9"
CDGen_SetDirection 120 ' 60 grados en sentido antihorario (en relación con la vertical línea)
CDGen_FowardDraw -0.7 ' Dibuja 0.7 unidades en la dirección opuesta
CDGen_SetDirection -60 ' 60 grados en sentido antihorario
p>CDGen_FowardDraw -0.7 'Dibuja 0.7 unidades en la dirección opuesta
CDGen_SetDirection -60' 120 grados en el sentido de las agujas del reloj
CDGen_FowardDraw -1.5' Dibujar 1,5 unidades
CDGen_SetDirection -60' 120 grados en el sentido de las agujas del reloj
CDGen_FowardDraw -0.7 'Dibuja 0.7 unidades en la dirección opuesta
CDGen_SetDirection -60 '120 grados en el sentido de las agujas del reloj
C
DGen_FowardDraw -0.7 'Dibuja 0.7 unidades
CDGen_SetDirection 120 '120 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 0.7 'Dibuja 0.7 unidades en la dirección opuesta
CDGen_SetDirection -60 'En el sentido de las agujas del reloj mano 120 grados
CDGen_FowardDraw 0.5 ' Dibuja 0.5 unidades
CDGen_CloseToMiddle 2, 50 ' Cierra la posición actual del lápiz hasta el punto 50 del segundo trazo (comenzando en 0)
' La siguiente es la acción vectorial de las letras, si estás interesado, puedes continuar
Caso "A"
CDGen_SetDirection -(Rnd * 20 150) ' En sentido antihorario 150 -170 grados (en relación con la línea vertical)
CDGen_FowardDraw Rnd * 0.2 1.1 ' Dibujar 1.1-1.3 unidades
CDGen_SetDirection Rnd * 20 140 ' 140-160 grados en el sentido de las agujas del reloj
CDGen_FowardDraw Rnd * 0.2 1.1 'Dibuja 1.1-1.3 unidades
CDGen_MoveToMiddle 0, 30 'Mueve la posición del pincel a la posición 30 del primer trazo (comenzando desde 0)
CDGen_CloseToMiddle 1, 70 ' Cierra los 70 puntos entre la posición actual del pincel y el primer trazo (comenzando en 0)
Caso "B"
CDGen_SetDirection -(Rnd * 20 50) ' En sentido contrario a las agujas del reloj 50-70 grados (en relación con la línea vertical)
CDGen_FowardDraw Rnd * 0.4 0.8 ' Dibujar 0.8-1.2 unidades
CDGen_SetDirection Rnd * 20 110 ' 110-130 grados en sentido horario
CDGen_FowardDraw Rnd * 0.2 0.6 ' Dibujar 0.6-0.8 unidades
CDGen_SetDirection -(Rnd * 20 110) ' En sentido antihorario 110-130 grados
CDGen_FowardDraw Rnd * 0.2 0.6 'Dibujar 0.6- 0.8 unidades
CDGen_SetDirection Rnd * 20 110 '110-130 grados en el sentido de las agujas del reloj
CDGen_FowardDraw Rnd * 0.4 0.8 'Dibujar 0.8-1.2 unidades
CDGen_Close 0 ' Cierra el lápiz actual y el primer lápiz (comenzando en 0)
Caso "C"
CDGen_SetDirection -60 ' 60 grados en sentido antihorario (en relación con la línea vertical)
CDGen_FowardDraw -0.7 ' Dibuja 0.7 unidades en la dirección opuesta
CDGen_SetDirection -60 ' 60 grados en sentido antihorario
CDGen_FowardDraw -0.7 ' Dibuja 0.7 unidades en la dirección opuesta
CDGen_SetDirection 120 '120 grados en el sentido de las agujas del reloj
CDGen_FowardDraw 1.5
' Dibujar 1,5 unidades
CDGen_SetDirection 120 '120 grados en el sentido de las agujas del reloj
CDGen_FowardDraw -0.7 'Dibujar 0,7 unidades en la dirección opuesta
CDGen_SetDirection 120 '120 grados en el sentido de las agujas del reloj
p>
CDGen_FowardDraw 0.7 'Dibuja 0.7 unidades
'Agregue más conjuntos de caracteres, modifique el valor del atributo de cCharSet en consecuencia
End Select
CDGen_Flush X0 , Y0
End Sub
Sub CDGen_Blur()
' Suaviza el mapa de bits generado
Dim i, j
Para j = 1 a nPixelHeight - 2
Para i = 1 a nCharCount * nPixelWidth - 2
Si Buf(j, i) = 0 entonces
If ((Buf(j, i - 1) or Buf(j 1, i)) And 1) lt;gt; 0 Then
' Si el punto actual es Puntos en blanco y uno de los cuatro puntos arriba, abajo, izquierda y derecha son puntos coloreados, entonces el punto se suavizará
Buf(j, i) = 2
End If
End If
Siguiente
Siguiente
End Sub
Sub CDGen_NoisyDot()
' Realizar ruido procesamiento en el mapa de bits generado
Dim i, j, NoisyDot, CurDot
Para j = 0 a nPixelHeight - 1
Para i = 0 a nCharCount * nPixelWidth - 1
Si Buf(j, i) lt;gt; 0 Entonces
NoisyDot = Int(Rnd * Rnd * nMaxSaturation)
Seleccione Case nColorNoisyDotOdds
Caso 0
CurDot = nMaxSaturation
Caso 1
CurDot = 0
Caso más
CurDot = NoisyDot
End Select
Si Rnd lt; nColorNoisyDotOdds Then Buf(j, i) = CurDot Else Buf(j, i) = nMaxSaturation p>
Else
NoisyDot = Int(Rnd * nMaxSaturation)
Seleccione caso nBlankNoisyDotOdds
Caso 0
CurDot = 0
Caso 1
CurDot = nMaxSaturation
Caso más
CurDot = NoisyDot
Selección final
p>
Si Rnd lt; nBlankNoisyDotOdds Then Buf(j, i) = CurDot Else Buf(j, i) = 0
Fin
Siguiente
Siguiente
End Sub
Sub CDGen()
' Generar matriz de mapa de bits
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
Siguiente
CDGen_Blur
p>
CDGen_NoisyDot
End Sub
Función HSBToRGB(vH, vS, vB)
' Convierte el valor de color de HSB a RGB
Atenuar aRGB(3), RGB1st, RGB2nd, RGB3rd
Atenuar nH, nS, nB
Atenuar lH, nF, nP, nQ, nT
vH = (vH Mod 360)
Si vS gt; entonces
vS = 100
ElseIf vS lt; /p>
vS = 0
Fin si
Si vB gt 100 Entonces
vB = 100
ElseIf vB; lt; 0 Entonces
vB = 0
Fin Si
Si vS gt 0 Entonces
nH = vH / 60
p>
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))
Seleccione el caso lH
Caso 0
aRGB(0) = nB * 255
aRGB(1) = nT * 255
p>
aRGB(2) = nP * 255
Caso 1
aRGB(0) = nQ * 255
aRGB(1) = nB * 255
aRGB(2) = nP * 255
Caso 2
aRGB(0) = nP * 255
aRGB( 1) = nB * 255
aRGB(2) = nT * 255
Caso 3
aRGB(0) = nP * 255
<p>aRGB(1) = nQ * 255
aRGB(2) = nB * 255
Caso 4
aRGB(0) = nT * 255
aRGB(1) = nP * 255
aRGB(2) = nB * 255
Caso 5
aRGB(0) = nB * 255
aRGB(1) = nP * 255
aRGB(2) = nQ * 255
Finalizar selección
De lo contrario
aRGB(0) = (vB * 255) / 100
aRGB(1) = aRGB(0)
aRGB(2) = aRGB(0 )
Finalizar si
HSBToRGB = ChrB(Round(aRGB(2), 0)) amp ChrB(Round(aRGB(1), 0)) amp; (aRGB(0), 0))
Función final
Sub CreatValidCode(pSN)
Dim i, j, CurColorHue
' Deshabilitar el almacenamiento en caché
Response.Expires = -9999
Response.AddHeader "pragma", "no-cache"
Response.AddHeader "cache-ctrol" , "no-cache"
Response.ContentType = "image/bmp"
Llamar a CDGen
Session(pSN) = DigtalStr 'Grabar en sesión p>
p>
Dim PicWidth, PicHeight, FileSize, PicDataSize
PicWidth = nCharCount * nPixelWidth
PicHeight = nPixelHeight
PicDataSize = PicWidth * PicHeight * 3
FileSize = PicDataSize 54
' Encabezado de información del archivo BMP de salida
Response.BinaryWrite ChrB(66) amp ChrB(77) amp; _
ChrB(FileSize Mod 256) y ChrB((FileSize \ 256) Mod 256) y ChrB((FileSize \ 256 \ 256) Mod 256) y
ChrB; (0) amplificador; ChrB(0) amplificador; ChrB(0) amplificador; (0)
'Encabezado de información de mapa de bits BMP de salida
Response.BinaryWrite ChrB(40
) amplificador; ChrB(0) amplificador; ChrB(0) amplificador; _
ChrB(PicWidth Mod 256) & ChrB; (PicWidth \ 256 \ 256 \ 256) & ) amplificador ChrB ((PicHeight \ 256 \ 256) Mod 256) amplificador
ChrB(24) amplificador; >
ChrB(0) y ChrB(0) y ChrB(0) y ChrB((PicDataSize \ 256) Mod 256) & ChrB((PicDataSize \ 256 \ 256) Mod 256) amp; \ 256) amp _
ChrB(18) amp; (0) amplificador _
ChrB(18) amplificador; ChrB(11) amplificador; ; ChrB(0) amplificador; ChrB(0) amplificador; ChrB(0) amplificador; /p>
' Salida de matriz de mapa de bits punto por punto
Si nColorHue = -1 Entonces
CurColorHue = Int(Rnd * 360)
ElseIf nColorHue = -2 Entonces
CurColorHue = 0
Si no
CurColorHue = nColorHue
Fin
Para j = 0 a nPixelHeight - 1
Para i = 0 a Len(DigtalStr) * nPixelWidth - 1
Si nColorHue = -2 entonces
Response.BinaryWrite HSBToRGB (CurColorHue, 0, 100 - Buf(nPixelHeight - 1 - j, i))
Else
Response.BinaryWrite HSBToRGB(CurColorHue, Buf(nPixelHeight - 1 - j, i) , 100)
Finalizar si
Siguiente
Siguiente
Fin Sub
gt;