aijava

          welcome to my online log ! open java new world! Taste java charm........
          posts - 1, comments - 4, trackbacks - 0, articles - 42
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          asp 動態生成驗證碼

          Posted on 2008-01-07 22:44 閱讀(201) 評論(0)  編輯  收藏 所屬分類: ASP/ASP.NET

          <%
          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
          %>

          http://freehost13.websamba.com
          主站蜘蛛池模板: 洛宁县| 长宁区| 沾化县| 大理市| 九寨沟县| 台安县| 盐源县| 黑龙江省| 萍乡市| 沅江市| 平南县| 富民县| 呼图壁县| 东城区| 明星| 宜良县| 来凤县| 丽水市| 普陀区| 靖宇县| 遵义县| 东阳市| 木里| 邵阳市| 石柱| 微山县| 柞水县| 浮山县| 炉霍县| 澜沧| 石狮市| 甘谷县| 灌云县| 方城县| 凤山市| 木里| 伊宁县| 昂仁县| 嘉义县| 额敏县| 浮山县|