Letter(1) = "00000000000000"<br&g">

ASP不需要组件生成图片验证码的方法

80酷酷网    80kuku.com

  验证码

建立font.asp 文件

<%
Dim Font
Dim Letter(30)
Set Font = Server.CreateObject("Scripting.Dictionary")

Letter(0) = "00000000000000"
Letter(1) = "00000000000000"
Letter(2) = "00000000000000"
Letter(3) = "00000000000000"
Letter(4) = "00000000000000"
Letter(5) = "00000000000000"
Letter(6) = "00000000000000"
Letter(7) = "00000000000000"
Letter(8) = "00011000000000"
Letter(9) = "00011110000000"
Letter(10) = "00001111000000"
Letter(11) = "00011111000000"
Letter(12) = "00011011100000"
Letter(13) = "00111001100000"
Letter(14) = "00110001111111"
Letter(15) = "00111111111110"
Letter(16) = "11111111110000"
Letter(17) = "11100000110000"
Letter(18) = "01100000110000"
Letter(19) = "01100000110000"
Letter(20) = "01100000110000"
Letter(21) = "01100000010000"
Letter(22) = "00000000000000"
Letter(23) = "00000000000000"
Letter(24) = "00000000000000"
Letter(25) = "00000000000000"
Letter(26) = "00000000000000"
Letter(27) = "00000000000000"
Letter(28) = "00000000000000"
Letter(29) = "00000000000000"
Font.Add "A", Letter

Letter(0) = "0000000000000"
Letter(1) = "0000000000000"
Letter(2) = "0000000000000"
Letter(3) = "0000000000000"
Letter(4) = "0000000000000"
Letter(5) = "0000000000000"
Letter(6) = "0000000000000"
Letter(7) = "0000000000000"
Letter(8) = "0000000000000"
Letter(9) = "1100000000000"
Letter(10) = "1100111100000"
Letter(11) = "0111111111000"
Letter(12) = "1111000011000"
Letter(13) = "1110000011000"
Letter(14) = "0011000111000"
Letter(15) = "0011111110000"
Letter(16) = "0111111111100"
Letter(17) = "0111111111111"
Letter(18) = "0111000000011"
Letter(19) = "0111000000011"
Letter(20) = "0111100000111"
Letter(21) = "0111111111110"
Letter(22) = "0110011111000"
Letter(23) = "0000000000000"
Letter(24) = "0000000000000"
Letter(25) = "0000000000000"
Letter(26) = "0000000000000"
Letter(27) = "0000000000000"
Letter(28) = "0000000000000"
Letter(29) = "0000000000000"
Font.Add "B", Letter

Letter(0) = "00000000000"
Letter(1) = "00000000000"
Letter(2) = "00000000000"
Letter(3) = "00000000000"
Letter(4) = "00000000000"
Letter(5) = "00000000000"
Letter(6) = "00000000000"
Letter(7) = "00000000000"
Letter(8) = "00000000000"
Letter(9) = "00001111100"
Letter(10) = "00111111100"
Letter(11) = "01110000000"
Letter(12) = "11100000000"
Letter(13) = "11000000000"
Letter(14) = "11000000000"
Letter(15) = "11000000000"
Letter(16) = "11000000000"
Letter(17) = "11000000000"
Letter(18) = "11000000000"
Letter(19) = "01100000011"
Letter(20) = "01110000110"
Letter(21) = "00111111110"
Letter(22) = "00011111000"
Letter(23) = "00000000000"
Letter(24) = "00000000000"
Letter(25) = "00000000000"
Letter(26) = "00000000000"
Letter(27) = "00000000000"
Letter(28) = "00000000000"
Letter(29) = "00000000000"
Font.Add "C", Letter

Letter(0) = "0000000000000"
Letter(1) = "0000000000000"
Letter(2) = "0000000000000"
Letter(3) = "0000000000000"
Letter(4) = "0000000000000"
Letter(5) = "0000000000000"
Letter(6) = "0000000000000"
Letter(7) = "0000000000000"
Letter(8) = "0110000000000"
Letter(9) = "0110000000000"
Letter(10) = "0111111100000"
Letter(11) = "1111111111000"
Letter(12) = "1111000011100"
Letter(13) = "0011000001100"
Letter(14) = "0011000000110"
Letter(15) = "0011000000110"
Letter(16) = "0011000000110"
Letter(17) = "0011000000110"
Letter(18) = "0011000000110"
Letter(19) = "0111000011100"
Letter(20) = "0111111111000"
Letter(21) = "0111111110000"
Letter(22) = "0110000000000"
Letter(23) = "0000000000000"
Letter(24) = "0000000000000"
Letter(25) = "0000000000000"
Letter(26) = "0000000000000"
Letter(27) = "0000000000000"
Letter(28) = "0000000000000"
Letter(29) = "0000000000000"
Font.Add "D", Letter

Letter(0) = "00000000000"
Letter(1) = "00000000000"
Letter(2) = "00000000000"
Letter(3) = "00000000000"
Letter(4) = "00000000000"
Letter(5) = "00000000000"
Letter(6) = "00000000000"
Letter(7) = "00000000000"
Letter(8) = "00000000000"
Letter(9) = "11000000000"
Letter(10) = "11100000000"
Letter(11) = "01111111110"
Letter(12) = "11111111100"
Letter(13) = "11110000000"
Letter(14) = "00110000000"
Letter(15) = "00110000000"
Letter(16) = "00111111100"
Letter(17) = "00111111100"
Letter(18) = "00110000000"
Letter(19) = "11110000000"
Letter(20) = "11111111110"
Letter(21) = "01111111110"
Letter(22) = "01100000000"
Letter(23) = "00000000000"
Letter(24) = "00000000000"
Letter(25) = "00000000000"
Letter(26) = "00000000000"
Letter(27) = "00000000000"
Letter(28) = "00000000000"
Letter(29) = "00000000000"
Font.Add "E", Letter

Letter(0) = "00000000000"
Letter(1) = "00000000000"
Letter(2) = "00000000000"
Letter(3) = "00000000000"
Letter(4) = "00000000000"
Letter(5) = "00000000000"
Letter(6) = "00000000000"
Letter(7) = "00000000000"
Letter(8) = "00000000000"
Letter(9) = "01100111110"
Letter(10) = "01111111111"
Letter(11) = "01111000011"
Letter(12) = "11100000000"
Letter(13) = "11100000000"
Letter(14) = "00100000000"
Letter(15) = "00100000000"
Letter(16) = "00111111000"
Letter(17) = "00111111000"
Letter(18) = "00111000000"
Letter(19) = "00110000000"
Letter(20) = "00110000000"
Letter(21) = "00110000000"
Letter(22) = "00110000000"
Letter(23) = "00000000000"
Letter(24) = "00000000000"
Letter(25) = "00000000000"
Letter(26) = "00000000000"
Letter(27) = "00000000000"
Letter(28) = "00000000000"
Letter(29) = "00000000000"
Font.Add "F", Letter

Letter(0) = "0000000000000"
Letter(1) = "0000000000000"
Letter(2) = "0000000000000"
Letter(3) = "0000000000000"
Letter(4) = "0000000000000"
Letter(5) = "0000000000000"
Letter(6) = "0000000000000"
Letter(7) = "0000000000000"
Letter(8) = "0000000000000"
Letter(9) = "0011000000000"
Letter(10) = "0011111111000"
Letter(11) = "0111111111000"
Letter(12) = "1110000000000"
Letter(13) = "1110000000000"
Letter(14) = "0110000000000"
Letter(15) = "0110000011000"
Letter(16) = "0110001111111"
Letter(17) = "0110001111110"
Letter(18) = "0110000011000"
Letter(19) = "0110000011000"
Letter(20) = "0111111111000"
Letter(21) = "0111111111000"
Letter(22) = "0011000011000"
Letter(23) = "0000000000000"
Letter(24) = "0000000000000"
Letter(25) = "0000000000000"
Letter(26) = "0000000000000"
Letter(27) = "0000000000000"
Letter(28) = "0000000000000"
Letter(29) = "0000000000000"
Font.Add "G", Letter

Letter(0) = "00000000000"
Letter(1) = "00000000000"
Letter(2) = "00000000000"
Letter(3) = "00000000000"
Letter(4) = "00000000000"
Letter(5) = "00000000000"
Letter(6) = "00000000000"
Letter(7) = "00000000000"
Letter(8) = "00000000100"
Letter(9) = "01100001100"
Letter(10) = "01100001100"
Letter(11) = "01100001100"
Letter(12) = "01110001100"
Letter(13) = "00110011000"
Letter(14) = "00110011000"
Letter(15) = "00111111000"
Letter(16) = "00111111000"
Letter(17) = "00110011000"
Letter(18) = "00110011000"
Letter(19) = "00110001100"
Letter(20) = "00110001110"
Letter(21) = "01110000110"
Letter(22) = "01100000010"
Letter(23) = "00000000000"
Letter(24) = "00000000000"
Letter(25) = "00000000000"
Letter(26) = "00000000000"
Letter(27) = "00000000000"
Letter(28) = "00000000000"
Letter(29) = "00000000000"
Font.Add "H", Letter

Letter(0) = "0000000000"
Letter(1) = "0000000000"
Letter(2) = "0000000000"
Letter(3) = "0000000000"
Letter(4) = "0000000000"
Letter(5) = "0000000000"
Letter(6) = "0000000000"
Letter(7) = "0000000000"
Letter(8) = "0000000000"
Letter(9) = "0000110000"
Letter(10) = "0110110110"
Letter(11) = "0111111110"
Letter(12) = "0001111000"
Letter(13) = "0001110000"
Letter(14) = "0001100000"
Letter(15) = "0001100000"
Letter(16) = "0001100000"
Letter(17) = "0001100000"
Letter(18) = "0001100000"
Letter(19) = "0001100000"
Letter(20) = "0111111000"
Letter(21) = "1111111110"
Letter(22) = "1100000100"
Letter(23) = "0000000000"
Letter(24) = "0000000000"
Letter(25) = "0000000000"
Letter(26) = "0000000000"
Letter(27) = "0000000000"
Letter(28) = "0000000000"
Letter(29) = "0000000000"
Font.Add "I", Letter

Letter(0) = "0000000000000"
Letter(1) = "0000000000000"
Letter(2) = "0000000000000"
Letter(3) = "0000000000000"
Letter(4) = "0000000000000"
Letter(5) = "0000000000000"
Letter(6) = "0000000000000"
Letter(7) = "0000000000000"
Letter(8) = "0000000110000"
Letter(9) = "0000111111110"
Letter(10) = "0000111111110"
Letter(11) = "0000000011000"
Letter(12) = "0000000011000"
Letter(13) = "0000000011000"
Letter(14) = "0000000011000"
Letter(15) = "1111100011000"
Letter(16) = "1111110011000"
Letter(17) = "0011000011000"
Letter(18) = "0011000011000"
Letter(19) = "0011000111000"
Letter(20) = "0001100110000"
Letter(21) = "0001111110000"
Letter(22) = "0000111100000"
Letter(23) = "0000000000000"
Letter(24) = "0000000000000"
Letter(25) = "0000000000000"
Letter(26) = "0000000000000"
Letter(27) = "0000000000000"
Letter(28) = "0000000000000"
Letter(29) = "0000000000000"
Font.Add "J", Letter

Letter(0) = "00000000000"
Letter(1) = "00000000000"
Letter(2) = "00000000000"
Letter(3) = "00000000000"
Letter(4) = "00000000000"
Letter(5) = "00000000000"
Letter(6) = "00000000000"
Letter(7) = "00000000000"
Letter(8) = "00000000000"
Letter(9) = "01100000100"
Letter(10) = "01100000110"
Letter(11) = "01100000110"
Letter(12) = "01100000110"
Letter(13) = "01100000110"
Letter(14) = "01100000110"
Letter(15) = "11111100110"
Letter(16) = "11111111110"
Letter(17) = "00110011100"
Letter(18) = "00110111110"
Letter(19) = "00110000110"
Letter(20) = "01110000110"
Letter(21) = "01100000110"
Letter(22) = "00000000000"
Letter(23) = "00000000000"
Letter(24) = "00000000000"
Letter(25) = "00000000000"
Letter(26) = "00000000000"
Letter(27) = "00000000000"
Letter(28) = "00000000000"
Letter(29) = "00000000000"
Font.Add "K", Letter

Letter(0) = "000000000000"
Letter(1) = "000000000000"
Letter(2) = "000000000000"
Letter(3) = "000000000000"
Letter(4) = "000000000000"
Letter(5) = "000000000000"
Letter(6) = "000000000000"
Letter(7) = "000000000000"
Letter(8) = "011000000000"
Letter(9) = "011000000000"
Letter(10) = "011000000000"
Letter(11) = "011000000000"
Letter(12) = "011100000000"
Letter(13) = "001100000000"
Letter(14) = "001100000000"
Letter(15) = "001100000000"
Letter(16) = "001100000000"
Letter(17) = "001100000000"
Letter(18) = "111100000000"
Letter(19) = "111110000000"
Letter(20) = "011111111110"
Letter(21) = "011111111100"
Letter(22) = "011000000000"
Letter(23) = "000000000000"
Letter(24) = "000000000000"
Letter(25) = "000000000000"
Letter(26) = "000000000000"
Letter(27) = "000000000000"
Letter(28) = "000000000000"
Letter(29) = "000000000000"
Font.Add "L", Letter

Letter(0) = "00000000000000"
Letter(1) = "00000000000000"
Letter(2) = "00000000000000"
Letter(3) = "00000000000000"
Letter(4) = "00000000000000"
Letter(5) = "00000000000000"
Letter(6) = "00000000000000"
Letter(7) = "00000000000000"
Letter(8) = "00000000000000"
Letter(9) = "01100000000000"
Letter(10) = "01100000110000"
Letter(11) = "11111000110000"
Letter(12) = "11111100111110"
Letter(13) = "01101111111110"
Letter(14) = "01100111011000"
Letter(15) = "01100110011000"
Letter(16) = "01100000011000"
Letter(17) = "01100000011000"
Letter(18) = "01100000011000"
Letter(19) = "01100000011000"
Letter(20) = "01100000010000"
Letter(21) = "01100000110000"
Letter(22) = "00000000100000"
Letter(23) = "00000000000000"
Letter(24) = "00000000000000"
Letter(25) = "00000000000000"
Letter(26) = "00000000000000"
Letter(27) = "00000000000000"
Letter(28) = "00000000000000"
Letter(29) = "00000000000000"
Font.Add "M", Letter

Letter(0) = "000000000"
Letter(1) = "000000000"
Letter(2) = "000000000"
Letter(3) = "000000000"
Letter(4) = "000000000"
Letter(5) = "000000000"
Letter(6) = "000000000"
Letter(7) = "000000000"
Letter(8) = "000000000"
Letter(9) = "000001100"
Letter(10) = "110001100"
Letter(11) = "111000110"
Letter(12) = "111000110"
Letter(13) = "111100110"
Letter(14) = "111100110"
Letter(15) = "111100110"
Letter(16) = "110110110"
Letter(17) = "110110110"
Letter(18) = "110111100"
Letter(19) = "110111100"
Letter(20) = "110011100"
Letter(21) = "110011000"
Letter(22) = "000011000"
Letter(23) = "000000000"
Letter(24) = "000000000"
Letter(25) = "000000000"
Letter(26) = "000000000"
Letter(27) = "000000000"
Letter(28) = "000000000"
Letter(29) = "000000000"
Font.Add "N", Letter

Letter(0) = "0000000000"
Letter(1) = "0000000000"
Letter(2) = "0000000000"
Letter(3) = "0000000000"
Letter(4) = "0000000000"
Letter(5) = "0000000000"
Letter(6) = "0000000000"
Letter(7) = "0000000000"
Letter(8) = "0000000000"
Letter(9) = "0000000000"
Letter(10) = "0000011000"
Letter(11) = "0001111100"
Letter(12) = "0110001110"
Letter(13) = "0100000110"
Letter(14) = "1100000011"
Letter(15) = "1100000011"
Letter(16) = "1100000011"
Letter(17) = "1100000011"
Letter(18) = "1110000011"
Letter(19) = "0110000011"
Letter(20) = "0011100110"
Letter(21) = "0011111110"
Letter(22) = "0000111100"
Letter(23) = "0000000000"
Letter(24) = "0000000000"
Letter(25) = "0000000000"
Letter(26) = "0000000000"
Letter(27) = "0000000000"
Letter(28) = "0000000000"
Letter(29) = "0000000000"
Font.Add "O", Letter

Letter(0) = "000000000"
Letter(1) = "000000000"
Letter(2) = "000000000"
Letter(3) = "000000000"
Letter(4) = "000000000"
Letter(5) = "000000000"
Letter(6) = "000000000"
Letter(7) = "000000000"
Letter(8) = "000000000"
Letter(9) = "011000000"
Letter(10) = "011111110"
Letter(11) = "111111110"
Letter(12) = "111000011"
Letter(13) = "001100011"
Letter(14) = "001100011"
Letter(15) = "011100111"
Letter(16) = "011111110"
Letter(17) = "001111000"
Letter(18) = "001100000"
Letter(19) = "001100000"
Letter(20) = "011100000"
Letter(21) = "011000000"
Letter(22) = "000000000"
Letter(23) = "000000000"
Letter(24) = "000000000"
Letter(25) = "000000000"
Letter(26) = "000000000"
Letter(27) = "000000000"
Letter(28) = "000000000"
Letter(29) = "000000000"
Font.Add "P", Letter

Letter(0) = "0000000000"
Letter(1) = "0000000000"
Letter(2) = "0000000000"
Letter(3) = "0000000000"
Letter(4) = "0000000000"
Letter(5) = "0000000000"
Letter(6) = "0000000000"
Letter(7) = "0000000000"
Letter(8) = "0000000000"
Letter(9) = "0000000000"
Letter(10) = "0001111000"
Letter(11) = "0111111100"
Letter(12) = "0111001110"
Letter(13) = "1100000110"
Letter(14) = "1100000011"
Letter(15) = "1100000011"
Letter(16) = "1100000011"
Letter(17) = "1100011011"
Letter(18) = "0110011011"
Letter(19) = "0111001111"
Letter(20) = "0011111110"
Letter(21) = "0001111110"
Letter(22) = "0000000110"
Letter(23) = "0000000010"
Letter(24) = "0000000000"
Letter(25) = "0000000000"
Letter(26) = "0000000000"
Letter(27) = "0000000000"
Letter(28) = "0000000000"
Letter(29) = "0000000000"
Font.Add "Q", Letter

Letter(0) = "00000000000"
Letter(1) = "00000000000"
Letter(2) = "00000000000"
Letter(3) = "00000000000"
Letter(4) = "00000000000"
Letter(5) = "00000000000"
Letter(6) = "00000000000"
Letter(7) = "00000000000"
Letter(8) = "00000000000"
Letter(9) = "01100000000"
Letter(10) = "01100000000"
Letter(11) = "01111111100"
Letter(12) = "11111111110"
Letter(13) = "11110000110"
Letter(14) = "00110000110"
Letter(15) = "00110011110"
Letter(16) = "00111111100"
Letter(17) = "01111100000"
Letter(18) = "01111110000"
Letter(19) = "00011111100"
Letter(20) = "00110011110"
Letter(21) = "00110000110"
Letter(22) = "00100000110"
Letter(23) = "00000000000"
Letter(24) = "00000000000"
Letter(25) = "00000000000"
Letter(26) = "00000000000"
Letter(27) = "00000000000"
Letter(28) = "00000000000"
Letter(29) = "00000000000"
Font.Add "R", Letter

Letter(0) = "000000000"
Letter(1) = "000000000"
Letter(2) = "000000000"
Letter(3) = "000000000"
Letter(4) = "000000000"
Letter(5) = "000000000"
Letter(6) = "000000000"
Letter(7) = "000000000"
Letter(8) = "000000000"
Letter(9) = "000000000"
Letter(10) = "001110000"
Letter(11) = "011111000"
Letter(12) = "111011000"
Letter(13) = "110011000"
Letter(14) = "110001110"
Letter(15) = "111111111"
Letter(16) = "011110011"
Letter(17) = "010000011"
Letter(18) = "110000011"
Letter(19) = "110000011"
Letter(20) = "111000111"
Letter(21) = "011111110"
Letter(22) = "000111100"
Letter(23) = "000000000"
Letter(24) = "000000000"
Letter(25) = "000000000"
Letter(26) = "000000000"
Letter(27) = "000000000"
Letter(28) = "000000000"
Letter(29) = "000000000"
Font.Add "S", Letter

Letter(0) = "000000000000"
Letter(1) = "000000000000"
Letter(2) = "000000000000"
Letter(3) = "000000000000"
Letter(4) = "000000000000"
Letter(5) = "000000000000"
Letter(6) = "000000000000"
Letter(7) = "000000000000"
Letter(8) = "000000000000"
Letter(9) = "000000000000"
Letter(10) = "000000000000"
Letter(11) = "000000000000"
Letter(12) = "011111111111"
Letter(13) = "111111111111"
Letter(14) = "110001100000"
Letter(15) = "000001100000"
Letter(16) = "000001100000"
Letter(17) = "000001100000"
Letter(18) = "000001100000"
Letter(19) = "000001100000"
Letter(20) = "000001100000"
Letter(21) = "000001100000"
Letter(22) = "000000000000"
Letter(23) = "000000000000"
Letter(24) = "000000000000"
Letter(25) = "000000000000"
Letter(26) = "000000000000"
Letter(27) = "000000000000"
Letter(28) = "000000000000"
Letter(29) = "000000000000"
Font.Add "T", Letter

Letter(0) = "00000000000"
Letter(1) = "00000000000"
Letter(2) = "00000000000"
Letter(3) = "00000000000"
Letter(4) = "00000000000"
Letter(5) = "00000000000"
Letter(6) = "00000000000"
Letter(7) = "00000000000"
Letter(8) = "00000000000"
Letter(9) = "00000001100"
Letter(10) = "00110001100"
Letter(11) = "00110001100"
Letter(12) = "00110001100"
Letter(13) = "01100011000"
Letter(14) = "01100011000"
Letter(15) = "01100011000"
Letter(16) = "01100011000"
Letter(17) = "01100011000"
Letter(18) = "01100011000"
Letter(19) = "00111111100"
Letter(20) = "11111111100"
Letter(21) = "11111001110"
Letter(22) = "00000000110"
Letter(23) = "00000000000"
Letter(24) = "00000000000"
Letter(25) = "00000000000"
Letter(26) = "00000000000"
Letter(27) = "00000000000"
Letter(28) = "00000000000"
Letter(29) = "00000000000"
Font.Add "U", Letter

Letter(0) = "0000000000"
Letter(1) = "0000000000"
Letter(2) = "0000000000"
Letter(3) = "0000000000"
Letter(4) = "0000000000"
Letter(5) = "0000000000"
Letter(6) = "0000000000"
Letter(7) = "0000000000"
Letter(8) = "0000000000"
Letter(9) = "0000000000"
Letter(10) = "1100000010"
Letter(11) = "1100000110"
Letter(12) = "0110001110"
Letter(13) = "0110011100"
Letter(14) = "0110011000"
Letter(15) = "0011111000"
Letter(16) = "0011110000"
Letter(17) = "0011110000"
Letter(18) = "0011110000"
Letter(19) = "0011100000"
Letter(20) = "0011100000"
Letter(21) = "0111100000"
Letter(22) = "0110000000"
Letter(23) = "0000000000"
Letter(24) = "0000000000"
Letter(25) = "0000000000"
Letter(26) = "0000000000"
Letter(27) = "0000000000"
Letter(28) = "0000000000"
Letter(29) = "0000000000"
Font.Add "V", Letter

Letter(0) = "00000000000000"
Letter(1) = "00000000000000"
Letter(2) = "00000000000000"
Letter(3) = "00000000000000"
Letter(4) = "00000000000000"
Letter(5) = "00000000000000"
Letter(6) = "00000000000000"
Letter(7) = "00000000000000"
Letter(8) = "00000000000000"
Letter(9) = "00000000000111"
Letter(10) = "00000000001111"
Letter(11) = "11000000001100"
Letter(12) = "11000000001100"
Letter(13) = "01100000001100"
Letter(14) = "01110000011100"
Letter(15) = "00110000011000"
Letter(16) = "00110010011000"
Letter(17) = "00110111011000"
Letter(18) = "00011111011000"
Letter(19) = "00011111111000"
Letter(20) = "00011101111000"
Letter(21) = "00011100111000"
Letter(22) = "00011000010000"
Letter(23) = "00000000000000"
Letter(24) = "00000000000000"
Letter(25) = "00000000000000"
Letter(26) = "00000000000000"
Letter(27) = "00000000000000"
Letter(28) = "00000000000000"
Letter(29) = "00000000000000"
Font.Add "W", Letter

Letter(0) = "00000000000"
Letter(1) = "00000000000"
Letter(2) = "00000000000"
Letter(3) = "00000000000"
Letter(4) = "00000000000"
Letter(5) = "00000000000"
Letter(6) = "00000000000"
Letter(7) = "00000000000"
Letter(8) = "00000000000"
Letter(9) = "00000000000"
Letter(10) = "01000000000"
Letter(11) = "01110001110"
Letter(12) = "00110111110"
Letter(13) = "00011110000"
Letter(14) = "00011100000"
Letter(15) = "00011100000"
Letter(16) = "00011110000"
Letter(17) = "00111110000"
Letter(18) = "00110011000"
Letter(19) = "01100011100"
Letter(20) = "01100001100"
Letter(21) = "11000001100"
Letter(22) = "11000000000"
Letter(23) = "00000000000"
Letter(24) = "00000000000"
Letter(25) = "00000000000"
Letter(26) = "00000000000"
Letter(27) = "00000000000"
Letter(28) = "00000000000"
Letter(29) = "00000000000"
Font.Add "X", Letter

Letter(0) = "0000000000000"
Letter(1) = "0000000000000"
Letter(2) = "0000000000000"
Letter(3) = "0000000000000"
Letter(4) = "0000000000000"
Letter(5) = "0000000000000"
Letter(6) = "0000000000000"
Letter(7) = "0000000000000"
Letter(8) = "0000000000000"
Letter(9) = "0000000000110"
Letter(10) = "1100000001110"
Letter(11) = "1100000011100"
Letter(12) = "1100000011000"
Letter(13) = "1100000110000"
Letter(14) = "1111111110000"
Letter(15) = "0111111110000"
Letter(16) = "0000110111000"
Letter(17) = "0000011011000"
Letter(18) = "0000011000000"
Letter(19) = "0000011000000"
Letter(20) = "0000011000000"
Letter(21) = "0000011000000"
Letter(22) = "0000010000000"
Letter(23) = "0000000000000"
Letter(24) = "0000000000000"
Letter(25) = "0000000000000"
Letter(26) = "0000000000000"
Letter(27) = "0000000000000"
Letter(28) = "0000000000000"
Letter(29) = "0000000000000"
Font.Add "Y", Letter

Letter(0) = "0000000000000"
Letter(1) = "0000000000000"
Letter(2) = "0000000000000"
Letter(3) = "0000000000000"
Letter(4) = "0000000000000"
Letter(5) = "0000000000000"
Letter(6) = "0000000000000"
Letter(7) = "0000000000000"
Letter(8) = "0000000000000"
Letter(9) = "0000000000000"
Letter(10) = "0111111110000"
Letter(11) = "0111111110000"
Letter(12) = "0000001100000"
Letter(13) = "0000011000000"
Letter(14) = "0000110000000"
Letter(15) = "0001110000000"
Letter(16) = "0011100000000"
Letter(17) = "0011000000000"
Letter(18) = "0110000000000"
Letter(19) = "1110000000000"
Letter(20) = "1100000000110"
Letter(21) = "1111111111110"
Letter(22) = "0111111111000"
Letter(23) = "0000000000000"
Letter(24) = "0000000000000"
Letter(25) = "0000000000000"
Letter(26) = "0000000000000"
Letter(27) = "0000000000000"
Letter(28) = "0000000000000"
Letter(29) = "0000000000000"
Font.Add "Z", Letter

Letter(0) = "000000000000"
Letter(1) = "000000000000"
Letter(2) = "000000000000"
Letter(3) = "000000000000"
Letter(4) = "000000000000"
Letter(5) = "000000000000"
Letter(6) = "000000000000"
Letter(7) = "000000000000"
Letter(8) = "000000000000"
Letter(9) = "000000000000"
Letter(10) = "001111110000"
Letter(11) = "011111111100"
Letter(12) = "110000011110"
Letter(13) = "110000000110"
Letter(14) = "110000000011"
Letter(15) = "110000000011"
Letter(16) = "110000000011"
Letter(17) = "110000000011"
Letter(18) = "110000000110"
Letter(19) = "011000011100"
Letter(20) = "011111111000"
Letter(21) = "000111000000"
Letter(22) = "000000000000"
Letter(23) = "000000000000"
Letter(24) = "000000000000"
Letter(25) = "000000000000"
Letter(26) = "000000000000"
Letter(27) = "000000000000"
Letter(28) = "000000000000"
Letter(29) = "000000000000"
Font.Add "0", Letter

Letter(0) = "00000"
Letter(1) = "00000"
Letter(2) = "00000"
Letter(3) = "00000"
Letter(4) = "00000"
Letter(5) = "00000"
Letter(6) = "00000"
Letter(7) = "00000"
Letter(8) = "00000"
Letter(9) = "00000"
Letter(10) = "00111"
Letter(11) = "01111"
Letter(12) = "11111"
Letter(13) = "11110"
Letter(14) = "00110"
Letter(15) = "00110"
Letter(16) = "01100"
Letter(17) = "01100"
Letter(18) = "11000"
Letter(19) = "11000"
Letter(20) = "11000"
Letter(21) = "11000"
Letter(22) = "00000"
Letter(23) = "00000"
Letter(24) = "00000"
Letter(25) = "00000"
Letter(26) = "00000"
Letter(27) = "00000"
Letter(28) = "00000"
Letter(29) = "00000"
Font.Add "1", Letter

Letter(0) = "0000000"
Letter(1) = "0000000"
Letter(2) = "0000000"
Letter(3) = "0000000"
Letter(4) = "0000000"
Letter(5) = "0000000"
Letter(6) = "0000000"
Letter(7) = "0000000"
Letter(8) = "0000000"
Letter(9) = "0111100"
Letter(10) = "1111110"
Letter(11) = "1100110"
Letter(12) = "1100110"
Letter(13) = "1100110"
Letter(14) = "0000110"
Letter(15) = "0000110"
Letter(16) = "0000110"
Letter(17) = "0111110"
Letter(18) = "1111110"
Letter(19) = "1101110"
Letter(20) = "1101110"
Letter(21) = "0111111"
Letter(22) = "0000010"
Letter(23) = "0000000"
Letter(24) = "0000000"
Letter(25) = "0000000"
Letter(26) = "0000000"
Letter(27) = "0000000"
Letter(28) = "0000000"
Letter(29) = "0000000"
Font.Add "2", Letter

Letter(0) = "00000000000"
Letter(1) = "00000000000"
Letter(2) = "00000000000"
Letter(3) = "00000000000"
Letter(4) = "00000000000"
Letter(5) = "00000000000"
Letter(6) = "00000000000"
Letter(7) = "00000000000"
Letter(8) = "00000000000"
Letter(9) = "01111100000"
Letter(10) = "11111100000"
Letter(11) = "00001100000"
Letter(12) = "00001100000"
Letter(13) = "00011111100"
Letter(14) = "11111111110"
Letter(15) = "11100000110"
Letter(16) = "00000000110"
Letter(17) = "00000000110"
Letter(18) = "00000000110"
Letter(19) = "00000000110"
Letter(20) = "00000011100"
Letter(21) = "00111111100"
Letter(22) = "00111110000"
Letter(23) = "00000000000"
Letter(24) = "00000000000"
Letter(25) = "00000000000"
Letter(26) = "00000000000"
Letter(27) = "00000000000"
Letter(28) = "00000000000"
Letter(29) = "00000000000"
Font.Add "3", Letter

Letter(0) = "00000000000"
Letter(1) = "00000000000"
Letter(2) = "00000000000"
Letter(3) = "00000000000"
Letter(4) = "00000000000"
Letter(5) = "00000000000"
Letter(6) = "00000000000"
Letter(7) = "00000000000"
Letter(8) = "00000000000"
Letter(9) = "01100000000"
Letter(10) = "01100000000"
Letter(11) = "01100000000"
Letter(12) = "01100000110"
Letter(13) = "01100000110"
Letter(14) = "01100001110"
Letter(15) = "01100001100"
Letter(16) = "11111111110"
Letter(17) = "11111111110"
Letter(18) = "00000011000"
Letter(19) = "00000011000"
Letter(20) = "00000011000"
Letter(21) = "00000011000"
Letter(22) = "00000000000"
Letter(23) = "00000000000"
Letter(24) = "00000000000"
Letter(25) = "00000000000"
Letter(26) = "00000000000"
Letter(27) = "00000000000"
Letter(28) = "00000000000"
Letter(29) = "00000000000"
Font.Add "4", Letter

Letter(0) = "00000000000"
Letter(1) = "00000000000"
Letter(2) = "00000000000"
Letter(3) = "00000000000"
Letter(4) = "00000000000"
Letter(5) = "00000000000"
Letter(6) = "00000000000"
Letter(7) = "00000000000"
Letter(8) = "01100000000"
Letter(9) = "01100000000"
Letter(10) = "11111111111"
Letter(11) = "01111111111"
Letter(12) = "01100000000"
Letter(13) = "01100000000"
Letter(14) = "01111111110"
Letter(15) = "01111111111"
Letter(16) = "01110000011"
Letter(17) = "00000000011"
Letter(18) = "00000000011"
Letter(19) = "00000000111"
Letter(20) = "11111111110"
Letter(21) = "11111111000"
Letter(22) = "00000000000"
Letter(23) = "00000000000"
Letter(24) = "00000000000"
Letter(25) = "00000000000"
Letter(26) = "00000000000"
Letter(27) = "00000000000"
Letter(28) = "00000000000"
Letter(29) = "00000000000"
Font.Add "5", Letter

Letter(0) = "0000000000"
Letter(1) = "0000000000"
Letter(2) = "0000000000"
Letter(3) = "0000000000"
Letter(4) = "0000000000"
Letter(5) = "0000000000"
Letter(6) = "0000000000"
Letter(7) = "0000000000"
Letter(8) = "0000000000"
Letter(9) = "0000000000"
Letter(10) = "0001110000"
Letter(11) = "0011111000"
Letter(12) = "0011110000"
Letter(13) = "0111001110"
Letter(14) = "0110111111"
Letter(15) = "0111111011"
Letter(16) = "1111100011"
Letter(17) = "1111000011"
Letter(18) = "1110000111"
Letter(19) = "1100000110"
Letter(20) = "1100001110"
Letter(21) = "1111111100"
Letter(22) = "0011110000"
Letter(23) = "0000000000"
Letter(24) = "0000000000"
Letter(25) = "0000000000"
Letter(26) = "0000000000"
Letter(27) = "0000000000"
Letter(28) = "0000000000"
Letter(29) = "0000000000"
Font.Add "6", Letter

Letter(0) = "0000000000"
Letter(1) = "0000000000"
Letter(2) = "0000000000"
Letter(3) = "0000000000"
Letter(4) = "0000000000"
Letter(5) = "0000000000"
Letter(6) = "0000000000"
Letter(7) = "0000000000"
Letter(8) = "0000000000"
Letter(9) = "0000000000"
Letter(10) = "1111111110"
Letter(11) = "1111111110"
Letter(12) = "0000001110"
Letter(13) = "0000001100"
Letter(14) = "0000011000"
Letter(15) = "0000111000"
Letter(16) = "0111111000"
Letter(17) = "0111111100"
Letter(18) = "0011000000"
Letter(19) = "0110000000"
Letter(20) = "0110000000"
Letter(21) = "0110000000"
Letter(22) = "0000000000"
Letter(23) = "0000000000"
Letter(24) = "0000000000"
Letter(25) = "0000000000"
Letter(26) = "0000000000"
Letter(27) = "0000000000"
Letter(28) = "0000000000"
Letter(29) = "0000000000"
Font.Add "7", Letter

Letter(0) = "000000000"
Letter(1) = "000000000"
Letter(2) = "000000000"
Letter(3) = "000000000"
Letter(4) = "000000000"
Letter(5) = "000000000"
Letter(6) = "000000000"
Letter(7) = "000000000"
Letter(8) = "000000000"
Letter(9) = "000111100"
Letter(10) = "000111110"
Letter(11) = "001100110"
Letter(12) = "001100110"
Letter(13) = "011111100"
Letter(14) = "110001110"
Letter(15) = "110000110"
Letter(16) = "110000110"
Letter(17) = "110000110"
Letter(18) = "110000110"
Letter(19) = "110001100"
Letter(20) = "011011100"
Letter(21) = "011111000"
Letter(22) = "001110000"
Letter(23) = "000000000"
Letter(24) = "000000000"
Letter(25) = "000000000"
Letter(26) = "000000000"
Letter(27) = "000000000"
Letter(28) = "000000000"
Letter(29) = "000000000"
Font.Add "8", Letter

Letter(0) = "000000000"
Letter(1) = "000000000"
Letter(2) = "000000000"
Letter(3) = "000000000"
Letter(4) = "000000000"
Letter(5) = "000000000"
Letter(6) = "000000000"
Letter(7) = "000000000"
Letter(8) = "000000000"
Letter(9) = "000000000"
Letter(10) = "001111100"
Letter(11) = "011111110"
Letter(12) = "111000110"
Letter(13) = "110000110"
Letter(14) = "110001110"
Letter(15) = "110001110"
Letter(16) = "111111110"
Letter(17) = "011110110"
Letter(18) = "000001100"
Letter(19) = "000001100"
Letter(20) = "000111000"
Letter(21) = "000110000"
Letter(22) = "000000000"
Letter(23) = "000000000"
Letter(24) = "000000000"
Letter(25) = "000000000"
Letter(26) = "000000000"
Letter(27) = "000000000"
Letter(28) = "000000000"
Letter(29) = "000000000"
Font.Add "9", Letter

Letter(0) = "000000000"
Letter(1) = "000000000"
Letter(2) = "000000000"
Letter(3) = "000000000"
Letter(4) = "000000000"
Letter(5) = "000000000"
Letter(6) = "000000000"
Letter(7) = "000000000"
Letter(8) = "000000000"
Letter(9) = "000000000"
Letter(10) = "000000000"
Letter(11) = "000000000"
Letter(12) = "000000000"
Letter(13) = "000000000"
Letter(14) = "000000000"
Letter(15) = "000000000"
Letter(16) = "000000000"
Letter(17) = "000000000"
Letter(18) = "000000000"
Letter(19) = "000000000"
Letter(20) = "000000000"
Letter(21) = "000000000"
Letter(22) = "000000000"
Letter(23) = "000000000"
Letter(24) = "000000000"
Letter(25) = "000000000"
Letter(26) = "000000000"
Letter(27) = "000000000"
Letter(28) = "000000000"
Letter(29) = "000000000"
Font.Add " ", Letter
%>

建立canvas.asp文件

<%
' Constants for this class
public const MAX_WIDTH  = 65535
public const MAX_HEIGHT  = 65535
public const INIT_WIDTH  = 20
public const INIT_HEIGHT = 20
public const FLAG_DEBUG  = false
public const CURRENT_VER = "01.00.05"
public const PI   = 3.14159265 ' Roughly

Class Canvas
' Public data
 public GlobalColourTable()
 public LocalColourTable()
 public ForegroundColourIndex ' Current foreground pen
 public BackgroundColourIndex ' Current background pen
 public TransparentColourIndex ' Current transparency colour index
 public UseTransparency ' Boolean for writing transparency
 public GIF89a ' Write GIF89a data
 public Comment ' Image comment 255 characters max
 
' Private data
 private sImage
 private lWidth
 private lHeight
 private iBits
 private lColourResolution
 private bSortFlag
 private bytePixelAspectRatio
 private byteSeperator
 private byteGraphicControl
 private byteEndOfImage
 private lLeftPosition
 private lTopPosition
 private lLocalColourTableSize
 private lGlobalColourTableSize
 private lReserved
 private bInterlaceFlag
 private bLocalColourTableFlag
 private bGlobalColourTableFlag
 private lCodeSize
 private bTest
 
' ***************************************************************************
' ************************ Raster management functions **********************
' ***************************************************************************

 public property get Version()
  Version = CURRENT_VER
 end property

 ' Get a specific pixel colour
 public property get Pixel(ByVal lX,ByVal lY)
  if lX <= lWidth and lX > 0 and lY <= lHeight and lY > 0 then
   Pixel = AscB(MidB(sImage,(lWidth * (lY - 1)) + lX,1))
  else ' Out of bounds, return zero
   Pixel = 0
  end if
 end property
 
 ' Set a specific pixel colour, look at speeding this up somehow...
 public property let Pixel(ByVal lX,ByVal lY,lValue)
  Dim sTemp
  Dim lOffset
  
  lX = int(lX)
  lY = int(lY)
  lValue = int(lValue)

  lOffset = lWidth * (lY - 1)

  if lX <= lWidth and lY <= lHeight and lX > 0 and lY > 0 then ' Clipping
   ' Set the pixel value at this point
   sImage = LeftB(sImage,lOffset + (lX - 1)) & ChrB(lValue) & RightB(sImage,LenB(sImage) - (lOffset + lX))
  end if  
 end property

 ' Read only width and height, to change these, resize the image
 public property get Width()
  Width = lWidth
 end property

 public property get Height()
  Height = lHeight
 end property

 public sub Replace(ByVal lOldColour,ByVal lNewColour)
  Dim lTempX
  Dim lTempY
  
  for lTempy = 1 to lHeight
   for lTempX = 1 to lWidth
    if Pixel(lTempX,lTempY) = lOldColour then
     Pixel(lTempX,lTempY) = lNewColour
    end if
   next
  next
 end sub

 ' Copy a section of the picture from one location to the other
 public sub Copy(ByVal lX1,ByVal lY1,ByVal lX2,ByVal lY2,ByVal lX3,ByVal lY3)
  Dim sCopy
  Dim lTemp1
  Dim lTemp2
  Dim lStartX
  Dim lStartY
  Dim lFinishX
  Dim lFinishY
  Dim lWidth
  Dim lHeight
  
  if lX1 > lX2 then
   lStartX = lX2
   lFinishX = lX1
  else
   lStartX = lX1
   lFinishX = lX2
  end if
  
  if lY1 > lY2 then
   lStartY = lY2
   lFinishY = lY1
  else
   lStartY = lY1
   lFinishY = lY2
  end if
  
  sCopy = ""
  
  lWidth = lFinishX - lStartX + 1
  lHeight = lFinishY - lStartY + 1

  for iTemp2 = lStartY to lFinishY
   for iTemp1 = lStartX to lFinishX
    sCopy = sCopy & ChrB(Pixel(iTemp1,iTemp2))
   next
  next
  
  for iTemp2 = 1 to lHeight
   for iTemp1 = 1 to lWidth
    Pixel(lX3 + iTemp1,lY3 + iTemp2) = AscB(MidB(sCopy,(iTemp2 - 1) * lWidth + iTemp1,1))
   next
  next
 end sub

 ' Non-recursive flood fill, VBScript has a short stack (200 bytes) so recursion won't work
 public sub Flood(ByVal lX,ByVal lY)
  Dim aPixelStack
  Dim objPixel
  Dim lOldPixel

  Set aPixelStack = New PixelStack
  
  aPixelStack.Push lX,lY
  
  lOldPixel = Pixel(lX,lY)
  
  while(aPixelStack.Size > 0)
   Set objPixel = aPixelStack.Pop
   
   if objPixel.X >= 1 and objPixel.X <= lWidth and objPixel.Y >= 1 and objPixel.Y <= lHeight then
    if Pixel(objPixel.X,objPixel.Y) <> ForegroundColourIndex and Pixel(objPixel.X,objPixel.Y) = lOldPixel then
     Pixel(objPixel.X,objPixel.Y) = ForegroundColourIndex
     
     aPixelStack.Push objPixel.X + 1,objPixel.Y
     aPixelStack.Push objPixel.X - 1,objPixel.Y
     aPixelStack.Push objPixel.X,objPixel.Y + 1
     aPixelStack.Push objPixel.X,objPixel.Y - 1
    end if
   end if
  wend
 end sub


 public sub Polygon(aX,aY,bJoin)
  Dim iTemp
  Dim lUpper

  if UBound(aX) <> UBound(aY) then exit sub
  if UBound(aX) < 1 then exit sub ' Must be more than one point
  
  lUpper = UBound(aX) - 1
  
  ' Draw a series of lines from arrays aX and aY
  for iTemp = 1 to lUpper
   Line aX(iTemp - 1),aY(iTemp - 1),aX(iTemp),aY(iTemp)
  next
  
  if bJoin then
   Line aX(lUpper),aY(lUpper),aX(0),aY(0)
  end if
 end sub

 ' Easy as, err, rectangle?
 public sub PieSlice(lX,lY,lRadius,sinStartAngle,sinArcAngle,bFilled)
  Dim sinActualAngle
  Dim sinMidAngle
  Dim lX2
  Dim lY2
  Dim iTemp
  
  Arc lX,lY,lRadius,lRadius,sinStartAngle,sinArcAngle
  AngleLine lX,lY,lRadius,sinStartAngle
  sinActualAngle = sinStartAngle + sinArcAngle
  if sinActualAngle > 360 then
   sinActualAngle = sinActualAngle - 360
  end if
  AngleLine lX,lY,lRadius,sinActualAngle
  ' Now pick a start flood point at the furthest point from the center
  ' Divide the arc angle by 2
  sinMidAngle = sinStartAngle + (sinArcAngle / 2)
  
  if sinMidAngle > 360 then
   sinMidAngle = sinMidAngle - 360
  end if

  if bFilled then
   for iTemp = 1 to lRadius - 1
    lY2 = CInt(lY + (Sin(DegreesToRadians(sinMidAngle)) * iTemp))
    lX2 = CInt(lX + (Cos(DegreesToRadians(sinMidAngle)) * iTemp))

    Flood lX2,lY2
   next
  end if
 end sub

 public sub Bezier(lX1,lY1,lCX1,lCY1,lCX2,lCY2,lX2,lY2,lPointCount)
  Dim sinT
  dim lX,lY,lLastX,lLastY
  dim sinResolution
  
  if lPointCount = 0 then exit sub
  
  sinResolution = 1 / lPointCount
  
  sinT = 0
  
  lLastX = lX1
  lLastY = lY1
  
  while sinT <= 1
   lX = int(((sinT^3) * -1 + (sinT^2) * 3 + sinT * -3 + 1) * lX1 + ((sinT^3) *  3 + (sinT^2) *-6 + sinT *  3) * lCX1 + ((sinT^3) * -3 + (sinT^2) * 3) * lCX2 + (sinT^3) * lX2)
   lY = int(((sinT^3) * -1 + (sinT^2) * 3 + sinT * -3 + 1) * lY1 + ((sinT^3) *  3 + (sinT^2) *-6 + sinT *  3) * lCY1 + ((sinT^3) * -3 + (sinT^2) * 3) * lCY2 + (sinT^3) * lY2)

   Line lLastX,lLastY,lX,lY
   
   lLastX = lX
   lLastY = lY
   
   sinT = sinT + sinResolution
  wend

  Line lLastX,lLastY,lX2,lY2
  
 end sub

 ' ArcPixel Kindly donated by webjx.com ()
 Private Sub ArcPixel(lX, lY, ltX, ltY, sinStart, sinEnd)
  Dim dAngle
    
     If ltX = 0 Then
         dAngle = Sgn(ltY) * PI / 2
     ElseIf ltX < 0 And ltY < 0 Then
         dAngle = PI + Atn(ltY / ltX)
     ElseIf ltX < 0 Then
         dAngle = PI - Atn(-ltY / ltX)
     ElseIf ltY < 0 Then
         dAngle = 2 * PI - Atn(-ltY / ltX)
     Else
         dAngle = Atn(ltY / ltX)
     End If
    
     If dAngle < 0 Then dAngle = 2 * PI + dAngle

  ' Compensation for radii spanning over 0 degree marker
  if sinEnd > DegreesToRadians(360) and dAngle < (sinEnd - DegreesToRadians(360)) then
   dAngle = dAngle + DegreesToRadians(360)
  end if
  
     If sinStart < sinEnd And (dAngle > sinStart And dAngle < sinEnd) Then
         'This is the "corrected" angle
         'To change back, change the minus to a plus
         Pixel(lX + ltX, lY + ltY) = ForegroundColourIndex
     End If
 End Sub
 
 ' Arc Kindly donated by Richard Deeming (), vast improvement on the
 ' previously kludgy Arc function.
 Public Sub Arc(ByVal lX, ByVal lY, ByVal lRadiusX, ByVal lRadiusY, ByVal sinStartAngle, ByVal sinArcAngle)
  ' Draw an arc at point lX,lY with radius lRadius
  ' running from sinStartAngle degrees for sinArcAngle degrees
  Dim lAlpha, lBeta, S, T, lTempX, lTempY
  Dim dStart, dEnd
    
     dStart = DegreesToRadians(sinStartAngle)
     dEnd = dStart + DegreesToRadians(sinArcAngle)
    
     lAlpha = lRadiusX * lRadiusX
     lBeta = lRadiusY * lRadiusY
     lTempX = 0
     lTempY = lRadiusY
     S = lAlpha * (1 - 2 * lRadiusY) + 2 * lBeta
     T = lBeta - 2 * lAlpha * (2 * lRadiusY - 1)
     ArcPixel lX, lY, lTempX, lTempY, dStart, dEnd
     ArcPixel lX, lY, -lTempX, lTempY, dStart, dEnd
     ArcPixel lX, lY, lTempX, -lTempY, dStart, dEnd
     ArcPixel lX, lY, -lTempX, -lTempY, dStart, dEnd

     Do
         If S < 0 Then
             S = S + 2 * lBeta * (2 * lTempX + 3)
             T = T + 4 * lBeta * (lTempX + 1)
             lTempX = lTempX + 1
         ElseIf T < 0 Then
             S = S + 2 * lBeta * (2 * lTempX + 3) - 4 * lAlpha * (lTempY - 1)
             T = T + 4 * lBeta * (lTempX + 1) - 2 * lAlpha * (2 * lTempY - 3)
             lTempX = lTempX + 1
             lTempY = lTempY - 1
         Else
             S = S - 4 * lAlpha * (lTempY - 1)
             T = T - 2 * lAlpha * (2 * lTempY - 3)
             lTempY = lTempY - 1
         End If

         ArcPixel lX, lY, lTempX, lTempY, dStart, dEnd
         ArcPixel lX, lY, -lTempX, lTempY, dStart, dEnd
         ArcPixel lX, lY, lTempX, -lTempY, dStart, dEnd
         ArcPixel lX, lY, -lTempX, -lTempY, dStart, dEnd

     Loop While lTempY > 0
 End Sub

 public sub AngleLine(ByVal lX,ByVal lY,ByVal lRadius,ByVal sinAngle)
  ' Draw a line at an angle
  ' Angles start from the top vertical and work clockwise
  ' Work out the destination defined by length and angle
  Dim lX2
  Dim lY2
  
  lY2 = (Sin(DegreesToRadians(sinAngle)) * lRadius)
  lX2 = (Cos(DegreesToRadians(sinAngle)) * lRadius)
  
  Line lX,lY,lX + lX2,lY + lY2
 end sub

 ' Bresenham line algorithm, this is pretty quick, only uses point to point to avoid the
 ' mid-point problem
 public sub Line(ByVal lX1,ByVal lY1,ByVal lX2,ByVal lY2)
  Dim lDX
  Dim lDY
  Dim lXIncrement
  Dim lYIncrement
  Dim lDPr
  Dim lDPru
  Dim lP
  
  lDX = Abs(lX2 - lX1)
  lDY = Abs(lY2 - lY1)
  
  if lX1 > lX2 then
   lXIncrement = -1
  else
   lXIncrement = 1
  end if
  
  if lY1 > lY2 then
   lYIncrement = -1
  else
   lYIncrement = 1
  end if
  
  if lDX >= lDY then
   lDPr = ShiftLeft(lDY,1)
   lDPru = lDPr - ShiftLeft(lDX,1)
   lP = lDPr - lDX
   
   while lDX >= 0
    Pixel(lX1,lY1) = ForegroundColourIndex
    if lP > 0 then
     lX1 = lX1 + lXIncrement
     lY1 = lY1 + lYIncrement
     lP = lP + lDPru
    else
     lX1 = lX1 + lXIncrement
     lP = lP + lDPr
    end if
    lDX = lDX - 1
   wend
  else
   lDPr = ShiftLeft(lDX,1)
   lDPru = lDPr - ShiftLeft(lDY,1)
   lP = lDPR - lDY
   
   while lDY >= 0
    Pixel(lX1,lY1) = ForegroundColourIndex
    if lP > 0 then
     lX1 = lX1 + lXIncrement
     lY1 = lY1 + lYIncrement
     lP = lP + lDPru
    else
     lY1 = lY1 + lYIncrement
     lP = lP + lDPr
    end if
    lDY = lDY - 1
   wend
  end if
  
 end sub

 public sub Rectangle(ByVal lX1,ByVal lY1,ByVal lX2,ByVal lY2)
  ' Easy as pie, well, actually pie is another function... draw four lines
  Line lX1,lY1,lX2,lY1
  Line lX2,lY1,lX2,lY2
  Line lX2,lY2,lX1,lY2
  Line lX1,lY2,lX1,lY1
 end sub

 public sub Circle(ByVal lX,ByVal lY,ByVal lRadius)
  Ellipse lX,lY,lRadius,lRadius
 end sub

 ' Bresenham ellispe, pretty quick also, uses reflection, so rotation is out of the
 ' question unless we perform a matrix rotation after rendering the ellipse coords
 public sub Ellipse(ByVal lX,ByVal lY,ByVal lRadiusX,ByVal lRadiusY)
  ' Draw a circle at point lX,lY with radius lRadius
  Dim lAlpha,lBeta,S,T,lTempX,lTempY
  
  lAlpha = lRadiusX * lRadiusX
  lBeta = lRadiusY * lRadiusY
  lTempX = 0
  lTempY = lRadiusY
  S = lAlpha * (1 - 2 * lRadiusY) + 2 * lBeta
  T = lBeta - 2 * lAlpha * (2 * lRadiusY - 1)
  Pixel(lX + lTempX,lY + lTempY) = ForegroundColourIndex
  Pixel(lX - lTempX,lY + lTempY) = ForegroundColourIndex
  Pixel(lX + lTempX,lY - lTempY) = ForegroundColourIndex
  Pixel(lX - lTempX,lY - lTempY) = ForegroundColourIndex
  Do
   if S < 0 then
    S = S + 2 * lBeta * (2 * lTempX + 3)
    T = T + 4 * lBeta * (lTempX + 1)
    lTempX = lTempX + 1
   elseif T < 0 then
    S = S + 2 * lBeta * (2 * lTempX + 3) - 4 * lAlpha * (lTempY - 1)
    T = T + 4 * lBeta * (lTempX + 1) - 2 * lAlpha * (2 * lTempY - 3)
    lTempX = lTempX + 1
    lTempY = lTempY - 1
   else
    S = S - 4 * lAlpha * (lTempY - 1)
    T = T - 2 * lAlpha * (2 * lTempY - 3)
    lTempY = lTempY - 1
   end if
   Pixel(lX + lTempX,lY + lTempY) = ForegroundColourIndex
   Pixel(lX - lTempX,lY + lTempY) = ForegroundColourIndex
   Pixel(lX + lTempX,lY - lTempY) = ForegroundColourIndex
   Pixel(lX - lTempX,lY - lTempY) = ForegroundColourIndex
  loop while lTempY > 0
 end sub

 ' Vector font support
 ' These fonts are described in terms of points on a grid with simple
 ' X and Y offsets. These functions take elements of a string and render
 ' them from arrays storing character vector information. Vector fonts are
 ' have proportional widths, unlike bitmapped fonts which are fixed in size
 ' The format for the vector array is simply a variable length list of x y pairs
 ' the sub DrawVectorChar renders the single character from the array.
 ' The other advantage of vector fonts is that they can be scaled :)

 ' Maybe add an angle value?
 public sub DrawVectorTextWE(ByVal lX,ByVal lY,sText,lSize)
  Dim iTemp
  Dim lCurrentStringX
  
  lCurrentStringX = lX
  
  For iTemp = 1 to Len(sText)
   lCurrentStringX = lCurrentStringX + DrawVectorChar(lCurrentStringX,lY,Mid(sText,iTemp,1),lSize,true) + int(lSize)
  Next
 end sub
 
 public sub DrawVectorTextNS(ByVal lX,ByVal lY,sText,lSize)
  Dim iTemp
  Dim lCurrentStringY
  
  lCurrentStringY = lY
  
  For iTemp = 1 to Len(sText)
   lCurrentStringY = lCurrentStringY + DrawVectorChar(lX,lCurrentStringY,Mid(sText,iTemp,1),lSize,false) + int(lSize)
  Next
 end sub
 
 private function DrawVectorChar(ByVal lX,ByVal lY,sChar,lSize,bOrientation)
  Dim iTemp
  Dim aFont
  Dim lLargestWidth
  
  if sChar <> " " then
   aFont = VFont(sChar)
  
   if bOrientation then
    lLargest = aFont(1,0) * lSize
   else
    lLargest = aFont(1,1) * lSize
   end if
  
   for iTemp = 1 to UBound(aFont,1) - 1
    if bOrientation then
     if aFont(iTemp,2) = 1  then ' Pen down
      Line lX + aFont(iTemp - 1,0) * lSize,lY + aFont(iTemp - 1,1) * lSize,lX + aFont(iTemp,0) * lSize,lY + aFont(iTemp,1) * lSize
     end if
     if (aFont(iTemp,0) * lSize) > lLargest then
      lLargest = aFont(iTemp,0) * lSize
     end if
    else
     if aFont(iTemp,2) = 1 then ' Pen down
      Line lX + aFont(iTemp - 1,0) * lSize,lY + aFont(iTemp - 1,1) * lSize,lX + aFont(iTemp,0) * lSize,lY + aFont(iTemp,1) * lSize
     end if
     if (aFont(iTemp,1) * lSize) > lLargest then
      lLargest = aFont(iTemp,1) * lSize
     end if
    end if
   next
  else
   lLargest = lSize * 3
  end if
  
  ' Return the width of the character
  DrawVectorChar = lLargest
 end function

 ' Bitmap font support
 public sub DrawTextWE(ByVal lX,ByVal lY,sText)
  ' Render text at lX,lY
  ' There's a global dictionary object called Font and it should contain all the
  ' letters in arrays of a 5x5 grid
  Dim iTemp1
  Dim iTemp2
  Dim iTemp3
  Dim bChar
  
  For iTemp1 = 0 to UBound(Letter) - 1
   For iTemp2 = 1 to len(sText)
    For iTemp3 = 1 to Len(Font(Mid(sText,iTemp2,1))(iTemp1))
     bChar = Mid(Font(Mid(sText,iTemp2,1))(iTemp1),iTemp3,1)
     if bChar <> "0" then
      Pixel(lX + ((iTemp2 - 1) * Len(Letter(0))) + iTemp3,lY + iTemp1) = CLng(bChar)
     end if
    next
   next
  next
 end sub

 public sub DrawTextNS(ByVal lX,ByVal lY,sText)
  ' Render text at lX,lY
  ' There's a global dictionary object called Font and it should contain all the
  ' letters in arrays of a 5x5 grid
  Dim iTemp1
  Dim iTemp2
  Dim iTemp3
  Dim bChar

  for iTemp1 = 1 to len(sText)
   for iTemp2 = 0 to UBound(Letter) - 1
    for iTemp3 = 1 to len(Font(Mid(sText,iTemp1,1))(iTemp2))
     bChar = Mid(Font(Mid(sText,iTemp1,1))(iTemp2),iTemp3,1)
     if bChar <> "0" then
      Pixel(lX + iTemp3,lY + (iTemp1 * (UBound(Letter) + 1)) + iTemp2) = CLng(bChar)
     end if
    next
   next
  next
 end sub

 ' Clear the image, because String sends out UNICODE characters, we double up the index as a WORD
 public sub Clear()
  ' Possibly quicker, but a little less accurate
  sImage = String(lWidth * ((lHeight + 1) / 2),ChrB(BackgroundColourIndex) & ChrB(BackgroundColourIndex))
 end sub
 
 public sub Resize(ByVal lNewWidth,ByVal lNewHeight,bPreserve)
  ' Resize the image, don't stretch
  Dim sOldImage
  Dim lOldWidth
  Dim lOldHeight
  Dim lCopyWidth
  Dim lCopyHeight
  Dim lX
  Dim lY
  
  if bPreserve then
   sOldImage = sImage
   lOldWidth = lWidth
   lOldHeight = lHeight
  end if

  lWidth = lNewWidth
  lHeight = lNewHeight

  Clear
  
  if bPreserve then
   ' Now copy the old image into the new
   if lNewWidth > lOldWidth then
    lCopyWidth = lOldWidth
   else
    lCopyWidth = lNewWidth
   end if
  
   if lNewHeight > lOldHeight then
    lCopyHeight = lOldHeight
   else
    lCopyHeight = lNewHeight
   end if

   ' Now set the new width and height
   lWidth = lNewWidth
   lHeight = lNewHeight
  
   ' Copy the old bitmap over, possibly could do with improvement, this does it
   ' on a pixel leve, there is room here to perform a MidB from one string to another
   for lY = 1 to lCopyHeight
    for lX = 1 to lCopyWidth
     Pixel(lX,lY) = AscB(MidB(sOldImage,(lOldWidth * (lY - 1)) + lX,1))
    next
   next
  end if
 end sub
 
' ***************************************************************************
' ************************* GIF Management functions ************************
' ***************************************************************************
 
 public property get TextImageData()
  Dim iTemp
  Dim sText
  
  sText = ImageData
   
  TextImageData = ""
   
  for iTemp = 1 to LenB(sText)
   TextImageData = TextImageData & Chr(AscB(Midb(sText,iTemp,1)))
  next
 end property
 
 ' Dump the image out as a GIF 87a
 public property get ImageData()
  Dim sText
  Dim lTemp  
  
  ImageData = MagicNumber
  ImageData = ImageData & MakeWord(lWidth)
  ImageData = ImageData & MakeWord(lHeight)
  ImageData = ImageData & MakeByte(GlobalDescriptor)
  ImageData = ImageData & MakeByte(BackgroundColourIndex)
  ImageData = ImageData & MakeByte(bytePixelAspectRatio)
  ImageData = ImageData & GetGlobalColourTable

  if GIF89a then
   ' Support for extended blocks
   if UseTransparency then
    ImageData = ImageData & MakeByte(byteGraphicControl)
    ImageData = ImageData & MakeByte(&HF9)
    ImageData = ImageData & MakeByte(&H04)
    ImageData = ImageData & MakeByte(1)
    ImageData = ImageData & MakeWord(0)
    ImageData = ImageData & MakeByte(TransparentColourIndex)
    ImageData = ImageData & MakeByte(0)
   end if
   if Comment <> "" then
    ImageData = ImageData & MakeByte(byteGraphicControl)
    ImageData = ImageData & MakeByte(&HFE)
    sText = Left(Comment,255) ' Truncate to 255 characters
    ImageData = ImageData & MakeByte(Len(sText))
    For lTemp = 1 to Len(sText)
     ImageData = ImageData & MakeByte(Asc(Mid(sText,lTemp,1)))
    Next
    ImageData = ImageData & MakeByte(0)
   end if
  end if
  
  ImageData = ImageData & MakeByte(byteSeperator)
  ImageData = ImageData & MakeWord(lLeftPosition)
  ImageData = ImageData & MakeWord(lTopPosition)
  ImageData = ImageData & MakeWord(lWidth)
  ImageData = ImageData & MakeWord(lHeight)
  ImageData = ImageData & MakeByte(LocalDescriptor)
  ImageData = ImageData & MakeByte(lCodeSize)
  ImageData = ImageData & GetRasterData
  ImageData = ImageData & MakeByte(0)
  ImageData = ImageData & MakeByte(byteEndOfImage)
  
 end property
 
 public sub Write()
  if bTest then
   ' Write out the bytes in ASCII
   Response.Write Debug(ImageData)
  else
   ' Fix from Daniel Hasan so that duplicate headers don't get sent to confuse Netscape
   Response.ContentType = "image/gif"
   ' Correct content disposition, so that when saving the image through the browser
   ' the filename and type comes up as image.gif instead of an asp file
   Response.AddHeader "Content-Disposition","filename=image.gif"
 &

分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: