建立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 21kn.com (www.21kn.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 (www.21kn.com), 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" & |