С.И.Хашин
Модуль служит для работы с растровыми шрифтами. В настоящий момент реализованы только шрифты гарнитуры Verdana кодировки cp-1251, размера от 7 до 16 в обычном и в полужирном виде:
Verdana 07 |
Verdana 07 b |
Verdana 08 |
Verdana 08 b |
Verdana 09 |
Verdana 09 b |
Verdana 10 |
Verdana 10 b |
Verdana 11 |
Verdana 11 b |
Verdana 12 |
Verdana 12 b |
Verdana 14 |
Verdana 14 b |
Verdana 16 |
Verdana 16 b |
Каждый шрифт состоит из 256 символов. Каждый символ представлен битовым массивом.
В символах с кодом ≤32 («пробел») лежат пробелы.
Например, шрифт Verdana размер 7 (файл Fonts/verdana07.h) описывается так:
#define Fverdana07_H 14 // высота символов #define Fverdana07_W 24 // ширина символов unsigned char Fverdana07[] = { //0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x01 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, … //'ю'=0xFE 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x80, 0x00, 0x48, 0x40, 0x00, 0x48, 0x40, 0x00, 0x78, 0x40, 0x00, 0x48, 0x40, 0x00, 0x48, 0x40, 0x00, 0x47, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //'я'=0xFF 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x24, 0x00, 0x00, 0x44, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };Класс hFont описывается следующим образом:
class hFont{ private: unsigned char *font; // font byte array int h, w; // height, width unsigned char wc[256]; // widths of every character public: // constructors/destructor hFont(); hFont(int garnitura, int typ, int size); // int height() { return h; } int width () { return w; } int width (unsigned char ch) { return wc[ch]; } // int setFont(int garnitura, int typ, int size); // returns error code bool isCharEmpty( int ch ); // is character empty? int getBit(unsigned char ch, int x, int y);// b/w of the point int mLeft (unsigned char ch); // most left point (0 if char empty) int mRight(unsigned char ch); // most right point (0 if char empty) int mTop (unsigned char ch); // most top point (0 if char empty) int mBottom(unsigned char ch); // most down point (0 if char empty) };---------------------------------------
Модуль iMatrFonts.h используется для вывода текста в матрицу.
Он работает как с обычными матрицами (matr), так и с тройными (RGB, matr3).
В его заголовке 3 функции:
int DrawChar( matr &a, hFont &f, unsigned char ch, int x, int y, int c ); // вывести символ ch в матрицу a в точке (x,y) цветом c void DrawText( matr &a, hFont &f, char *s, int x, int y, int c ); // вывести текст s в матрицу a в точке (x,y) цветом c void DrawText( matr3 &a3, hFont &f, char *s, int x, int y, int cr,int cg, int cb ); // вывести текст s в матрицу a3 в точке (x,y) цветом (cr,cg,cb)
Пример использования
#include "iMatrix.h" // matrix with integer coefficients #include "iMatrix3.h" // 3-matrix with integer coefficients #include "fonts.h" // fonts #include "iMatrFonts.h" // Text on matrix … hFont fnt; fnt.setFont(FONT_VERDANA, FONT_USUAL, 10); matr3 a(mx, my); … int x=77, y=89; int fRed=0, fGreen=128, fBlue=255; DrawText( a, fnt, "пример текста", x, y, fRed,fGreen,fBlue);