К оглавлению

С.И.Хашин

Работа со шрифтами


Класс fonts


fonts.h - заголовочный файл
fonts.cpp - реализация.

Модуль служит для работы с растровыми шрифтами. В настоящий момент реализованы только шрифты гарнитуры 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 - заголовочный файл
iMatrFonts.cpp - реализация.

Модуль 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);

К оглавлению


free counters