QBASICBOOK.ru: сайт про QB64

Опубликовано: 2020-06-15 08:00:00

Векторный шрифт

В этой статье представлена неплохая демонстрация векторного шрифта.

Рассмотрим исходный текст программы:


  1. DECLARE SUB DRAWTEXT (TEXT AS STRING, X AS INTEGER, Y AS INTEGER, FONTCOLOR AS INTEGER, FONTSIZE AS INTEGER, FONTANGLE AS INTEGER)
  2.  
  3. SCREEN 12
  4. DIM SHARED FONT(223) AS STRING
  5. DIM I AS INTEGER
  6. RESTORE FONTDATA
  7.  
  8. FOR I = 0 TO 223
  9.    READ FONT(I)
  10. NEXT I
  11.  
  12. 'DEMO
  13. DRAWTEXT " !" + CHR$(34) + "#$%&'()*+,-./0123456789:;<=>?@", 50, 50, 15, 4, 0
  14. DRAWTEXT "ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`", 50, 100, 14, 4, 0
  15. DRAWTEXT "ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~&#8730;№&#9632;", 50, 150, 12, 4, 0
  16. DRAWTEXT "ABVGDEYEZHZIYKLMNOPRSTUFKHTSCHSHSHCHYEYUYA", 50, 200, 11, 4, 0
  17. DRAWTEXT "ABVGDEYEZHZIYKLMNOPRSTUFKHTSCHSHSHCHYEYUYA", 50, 250, 10, 4, 0
  18. DRAWTEXT "1", 50, 400, 13, 1, 0
  19. DRAWTEXT "2", 60, 400, 13, 2, 0
  20. DRAWTEXT "3", 75, 400, 13, 3, 0
  21. DRAWTEXT "4", 95, 400, 13, 4, 0
  22. DRAWTEXT "5", 120, 400, 13, 5, 0
  23. DRAWTEXT "6", 150, 400, 13, 6, 0
  24. DRAWTEXT "7", 185, 400, 13, 7, 0
  25. DRAWTEXT "8", 225, 400, 13, 8, 0
  26. DRAWTEXT "9", 260, 400, 13, 9, 0
  27. DRAWTEXT "10", 310, 400, 13, 10, 0
  28. DRAWTEXT "     VRASHCHENIYE 0", 500, 350, 9, 2, 0
  29. DRAWTEXT "     VRASHCHENIYE 45", 500, 350, 9, 2, 45
  30. DRAWTEXT "     VRASHCHENIYE -45", 500, 350, 9, 2, -45
  31. DRAWTEXT "     VRASHCHENIYE 90", 500, 350, 9, 2, 90
  32. DRAWTEXT "     VRASHCHENIYE -90", 500, 350, 9, 2, -90
  33. DRAWTEXT "     VRASHCHENIYE 135", 500, 350, 9, 2, 135
  34. DRAWTEXT "     VRASHCHENIYE 180", 500, 350, 9, 2, 180
  35. DRAWTEXT "     VRASHCHENIYE -135", 500, 350, 9, 2, -135
  36.  
  37.  
  38. 'PRAVILA POSTROYENIYA SIMVOLOV:
  39. 'OBSHCHAYA VYSOTA SIMVOLA 9 YEDINITS, SHIRINA MOZHET BYT LYUBOY.
  40. 'RISOVANIYE VSEGDA NACHINAYETSYA V TOCHKE A I ZAKANCHIVAYETSYA V TOCHKE C
  41. 'PRI RISOVANII SIMVOLA MOZHNO ISPOLZOVAT VSE KOMANDY OPERATORA DRAW,
  42. 'ZA ISKLYUCHENIYEM KOMAND VRASHCHENIYA, MASSHTABA I TSVETA.
  43. 'PRIMER (SIMVOL SHCH):
  44. DATA "NU5R2NU4R2NU5RDBE"
  45. '0 0 0 0 0 0
  46. '0 0 0 0 0 0
  47. 'B 0 0 0 B 0
  48. 'B 0 B 0 B 0
  49. 'B 0 B 0 B 0
  50. 'B 0 B 0 B 0
  51. 'B 0 B 0 B 0
  52. 'A B B B B B C
  53. '0 0 0 0 0 B
  54.  
  55. FONTDATA:
  56. DATA "BR2": REM PROBEL
  57. DATA "NURUNLBUU3LM+1,+3BF2": REM !
  58. DATA "BU4UBRDBD4BR": REM "
  59. DATA "BU3NR3BUNR3BEND3BRD3BR2BD2": REM #
  60. DATA "BUFEH2ENUNFD5BRBE": REM $
  61. DATA "BRRULNDBLE3BLLURDBD4BR2": REM %
  62. DATA "BR4HUHLGDFREEBLNDHLHERFGBF3": REM &
  63. DATA "BU5DENLBD5BR": REM '
  64. DATA "BRBU5GD3FBR": REM (
  65. DATA "BU5FD3GBR2": REM )
  66. DATA "BU3R2BDH2BD2E2BD4BR": REM *
  67. DATA "BU3R2BHD2BD2BR2": REM +
  68. DATA "BURGURBF": REM ,
  69. DATA "BU3R2BD3BR": REM -
  70. DATA "URDLBR2": REM .
  71. DATA "M+2,-5BD5BR": REM /
  72. DATA "BUU3ERFNM-3,+3D3GLHBDBR4": REM 0
  73. DATA "BU4ED5LR2BR": REM 1
  74. DATA "BU3UERFDG3R3BR": REM 2
  75. DATA "BU5R3DGFDGLHBR4BD": REM 3
  76. DATA "BR3U5G3DR4BF": REM 4
  77. DATA "BUFREUHL2U2R3BD5BR": REM 5
  78. DATA "BU2ERFDGLHU3ERFBD4BR": REM 6
  79. DATA "BU5R3DM-2,+4BR3": REM 7
  80. DATA "BUUEREHLGFRFDGLHBR4BD": REM 8
  81. DATA "BUFREU3HLGDFREBD3BR": REM 9
  82. DATA "URDLBU3URDLBR2BD3": REM :
  83. DATA "URGBU3URDLBD3BR2": REM ;
  84. DATA "BR2M-2,-2M+2,-2BD4BR": REM <
  85. DATA "BU2R2BUNL2BD3BR": REM =
  86. DATA "M+2,-2M-2,-2BD4BR3": REM >
  87. DATA "BU4ERFGDBDDLURBBFBR": REM ?
  88. DATA "BEBUURDNLEHLGD2FRBR2": REM @
  89. DATA "U4ER2D3NL3D2BR": REM A
  90. DATA "U5R2FGNL2FDGL2BR4": REM B
  91. DATA "BE3BUHLGD3FREBF": REM C
  92. DATA "U5R2FD3GL2BR4": REM D
  93. DATA "BU5BR3L3D2NR2D3R3BR": REM E
  94. DATA "U2NR2U3R3DBD4BR": REM F
  95. DATA "BE2RDGLHU3ERFBD4BR": REM G
  96. DATA "U3NU2R3NU2D3BR": REM H
  97. DATA "RNRU5NLRBD5BR": REM I
  98. DATA "BUNUFREU4NL3BD5BR": REM J
  99. DATA "U3NU2RNM+2,-2M+2,+3BR": REM K
  100. DATA "NU5R3NUBR": REM L
  101. DATA "M+1,-5M+1,+5M+1,-5M+1,+5BR": REM M
  102. DATA "U5M+3,+5NU5BR": REM N
  103. DATA "BUU3ERFD3GLHBDBR4": REM O
  104. DATA "U5R2FDGL2BR4BD2": REM P
  105. DATA "BUU3ERFD3GLHBRRFBR": REM Q
  106. DATA "U5R2FDGLNLF2BR": REM R
  107. DATA "BUFREUHLHERFBD4BR": REM S
  108. DATA "BR2U5BL2BDUR4DBD4BR": REM T
  109. DATA "BU5D4FRENU4BF": REM U
  110. DATA "BU5M+1,+5RNM+1,-5BR2": REM V
  111. DATA "BU5M+1,+5M+1,-5M+1,+5NM+1,-5BR2": REM W
  112. DATA "M+3,-5BL3M+3,+5BR": REM X
  113. DATA "BRU2NM-1,-3NM+1,-3BF2": REM Y
  114. DATA "BU4UR3DG3DR3NUBR": REM Z
  115. DATA "BU5NRD5RBR": REM [
  116. DATA "BU5M+2,+5BR": REM \
  117. DATA "BU5RD5NLBR": REM ]
  118. DATA "BU4M+1,-1M+1,+1BD4BR": REM ^
  119. DATA "BDR2BE": REM _
  120. DATA "BU5FBD4BR": REM `
  121. DATA "BU3EFD2GHERD2BR": REM A
  122. DATA "NU5REUHLBF3": REM B
  123. DATA "BE3HLGD2FREBF": REM C
  124. DATA "BE2BULGDFRNU5BR": REM D
  125. DATA "BU2R2EHLGD2FREBF": REM E
  126. DATA "BRU2NLNRU2ERBD5BR": REM F
  127. DATA "BE2BU2LGDFRNU3DNGBR": REM G
  128. DATA "U3NU2RFD2BR": REM H
  129. DATA "RNRU3NLBUUBD5BR2": REM I
  130. DATA "FEU3NLBUUBD5BR": REM J
  131. DATA "U2NU3NE2F2BR": REM K
  132. DATA "BUNU4FBR": REM L
  133. DATA "U3NUEDND3ED4BR": REM M
  134. DATA "U3NUEFD3BR": REM N
  135. DATA "BUU2ER1FD2GL1HBDBR4": REM O
  136. DATA "U4RFDGLBR3BD": REM P
  137. DATA "BE2BU2LGDFRNU3D2BE": REM Q
  138. DATA "U3NUERBD4BR": REM R
  139. DATA "BUFREHLHERFBD3BR": REM S
  140. DATA "BRBU5D2NLNRD2FEBF": REM T
  141. DATA "BU4D3FRENU3DBR": REM U
  142. DATA "BU4M+1,+4NM+1,-4BR2": REM V
  143. DATA "BU4M+1,+4M+1,-4M+1,+4NM+1,-4BR2": REM W
  144. DATA "M+2,-4BL2M+2,+4BR": REM X
  145. DATA "BU4M+1,+2ND2NM+1,-2BF2": REM Y
  146. DATA "BU3UR2M-2,+4R2NUBR": REM Z
  147. DATA "BU4BR2GDNLDFBR": REM {
  148. DATA "NU4BR": REM |
  149. DATA "BU4FDNRDGBR3": REM }
  150. DATA "BU2EF2EBD2BR": REM ~
  151. DATA "U7R4D8L4UBR5": REM RAMKA
  152. DATA "U4ER2D3NL3D2BR": REM A
  153. DATA "BU3R2FDGL2U5R3BD5BR": REM B
  154. DATA "U5R2FGNL2FDGL2BR4": REM V
  155. DATA "U5R3DBD4BR": REM G
  156. DATA "BDURM+1,-5RD5NL2RDBE": REM D
  157. DATA "BU5BR3L3D2NR2D3R3BR": REM YE
  158. DATA "U2ER2FD2BL4BU5DFR2EUBL2D5BR3": REM ZH
  159. DATA "BUFREUHEHLGBF4": REM Z
  160. DATA "NU5M+3,-5D5BR": REM I
  161. DATA "NU5M+3,-5ND5BUBL2RBR2BD6": REM Y
  162. DATA "U3NU2RNM+2,-2M+2,+3BR": REM K
  163. DATA "M+2,-5RD5BR": REM L
  164. DATA "M+1,-5M+1,+5M+1,-5M+1,+5BR": REM M
  165. DATA "U3NU2R3NU2D3BR": REM N
  166. DATA "BUU3ERFD3GLHBDBR4": REM O
  167. DATA "U5R3D5BR": REM P
  168. DATA "U5R2FDGL2BR4BD2": REM R
  169. DATA "BE3BUHLGD3FREBF": REM S
  170. DATA "BR2U5BL2BDUR4DBD4BR": REM T
  171. DATA "BUFREU4BL3D2FR2BD2BR": REM U
  172. DATA "BR2U5RFD2GL2HU2ERBR3BD5": REM F
  173. DATA "M+3,-5BL3M+3,+5BR": REM KH
  174. DATA "NU5R2NU5RDBE": REM TS
  175. DATA "BR3U5BL3D2FR2BD2BR": REM CH
  176. DATA "NU5R2NU4R2NU5BR": REM SH
  177. DATA "NU5R2NU4R2NU5RDBE": REM SHCH
  178. DATA "BU4URD5R2EUHL2BF3BR": REM
  179. DATA "BU3R2FDGL2U5BR4D5BR": REM Y
  180. DATA "BU5D5R2EUHL2BF3BR": REM
  181. DATA "BUFREU2NL2UHLGBF4": REM E
  182. DATA "U3NU2RUERFD3GLHU3BF4": REM YU
  183. DATA "E2NRLHUER2D5BR": REM YA
  184. DATA "BU3EFD2GHERD2BR": REM A
  185. DATA "BU2RFGLU3ERBD4BR": REM B
  186. DATA "U4RFGNLFGNLBR2": REM V
  187. DATA "U4R2DBD3BR": REM G
  188. DATA "BDURM+1,-4RD4NL2RDBUBR": REM D
  189. DATA "BU2R2EHLGD2FREBF": REM YE
  190. DATA "UENRHUBR2ND4BR2DGNLFDBR": REM ZH
  191. DATA "BU3ERFGNLFGLHBDBR4": REM Z
  192. DATA "BU4D4M+2,-4D4BR": REM I
  193. DATA "BU4D4M+2,-4BLNUBRD4BR": REM Y
  194. DATA "U2NU2NE2F2BR": REM K
  195. DATA "M+1,-4RD4BR": REM L
  196. DATA "M+1,-4M+1,+4M+1,-4M+1,+4BR": REM M
  197. DATA "U2NU2R2NU2D2BR": REM N
  198. DATA "BUU2ER1FD2GL1HBDBR4": REM O
  199. DATA "U4R2D4BR": REM P
  200. DATA ""
  201. DATA ""
  202. DATA ""
  203. DATA ""
  204. DATA ""
  205. DATA ""
  206. DATA ""
  207. DATA ""
  208. DATA ""
  209. DATA ""
  210. DATA ""
  211. DATA ""
  212. DATA ""
  213. DATA ""
  214. DATA ""
  215. DATA ""
  216. DATA ""
  217. DATA ""
  218. DATA ""
  219. DATA ""
  220. DATA ""
  221. DATA ""
  222. DATA ""
  223. DATA ""
  224. DATA ""
  225. DATA ""
  226. DATA ""
  227. DATA ""
  228. DATA ""
  229. DATA ""
  230. DATA ""
  231. DATA ""
  232. DATA ""
  233. DATA ""
  234. DATA ""
  235. DATA ""
  236. DATA ""
  237. DATA ""
  238. DATA ""
  239. DATA ""
  240. DATA ""
  241. DATA ""
  242. DATA ""
  243. DATA ""
  244. DATA ""
  245. DATA ""
  246. DATA ""
  247. DATA ""
  248. DATA "U4RFDGLBR3BD": REM R
  249. DATA "BE3HLGD2FREBF": REM S
  250. DATA "BU3URND4RDBD3BR": REM T
  251. DATA "BU4D1FRNU2D1GLBR3": REM U
  252. DATA "BR2U4LGDFR2EUHLBD4BR3": REM F
  253. DATA "M+2,-4BL2M+2,+4BR": REM KH
  254. DATA "BU4D4R2NU4RDBE": REM TS
  255. DATA "BU4D2FRNU3DBR": REM CH
  256. DATA "NU4RNU4RNU4BR": REM SH
  257. DATA "NU4RNU4RNU4RDBE": REM SHCH
  258. DATA "BU3URD4REUHLBF3": REM
  259. DATA "BU3RFDGLU4BR3D4BR": REM Y
  260. DATA "NU4REUHLBF3": REM
  261. DATA "BUFREUNLUHLGBF3BR": REM E
  262. DATA "U2NU2RUERFD2GLHUBF2BR2": REM YU
  263. DATA "ENRHUERD4BR": REM YA
  264. DATA "BU7BRDBRUBRBD2L3D2NR2D3R3BR": REM YE
  265. DATA "BU2R2EHBUUBD2LBUUBD2GD2FREBF": REM YE
  266. DATA ""
  267. DATA ""
  268. DATA ""
  269. DATA ""
  270. DATA ""
  271. DATA ""
  272. DATA ""
  273. DATA ""
  274. DATA ""
  275. DATA "BU2RM+1,+2M+1,-5BD5BR": REM &#8730;
  276. DATA "U5M+2,+5U5RBDRDLNUBDRBD2BR": REM №
  277. DATA ""
  278. DATA "BU2URDLBF2": REM &#9632;
  279. DATA ""
  280.  
  281. SUB DRAWTEXT (TEXT AS STRING, X AS INTEGER, Y AS INTEGER, FONTCOLOR AS INTEGER, FONTSIZE AS INTEGER, FONTANGLE AS INTEGER)
  282. 'TEXT           PECHATAYEMYY TEKST
  283. 'X              GORIZONTALNAYA POZITSIYA NACHALA TEKSTA
  284. 'Y              VERTIKALNAYA POZITSIYA NACHALA TEKSTA
  285. 'FONTCOLOR      TSVET SHRIFTA
  286. 'FONTSIZE       RAZMER SHRIFTA
  287. 'FONTANGLE      UGOL POVOROTA TEKSTA
  288. DIM N AS INTEGER, I AS INTEGER
  289. DIM C AS STRING, S AS STRING, MESSAGE AS STRING, A AS STRING
  290. FOR N = 1 TO LEN(TEXT)
  291.    I = ASC(MID$(TEXT, N, 1))
  292.    I = I - 32
  293.    MESSAGE = MESSAGE + RTRIM$(FONT(I))
  294. NEXT N
  295. C = "C" + LTRIM$(RTRIM$(STR$(FONTCOLOR)))
  296. A = "TA" + LTRIM$(RTRIM$(STR$(FONTANGLE)))
  297. S = "S" + LTRIM$(RTRIM$(STR$(FONTSIZE * 4)))
  298. MESSAGE = C + A + S + MESSAGE + "TA0"
  299. PSET (X, Y), POINT(X, Y)
  300. DRAW "X" + VARPTR$(MESSAGE):
  301. END SUB

 Рисунок 1 – Исходный текст для отрисовки векторного шрифта

Рисунок 1 – Исходный текст для отрисовки векторного шрифта

Рисунок 2 – Результат отрисовки векторного шрифта 

Рисунок 2 – Результат отрисовки векторного шрифта

 

Спасибо за прочтение этой статьи.

 

Прикрепленные файлы:

< Предыдущая статья
Конвертирование бинарных данных из формата *.BMP в DATA
Следующая статья >
Рисуем 3D-функции

Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.