mushue
29.09.2006, 15:05
Впринципе, я готов отдать исходники БукРу для дальнейшего сопровождения этой программки. Ну эт если кому надо..
Новая идея реализации шрифта БукРу.
В текущих версиях программы Я использовал стандартный размер шрифта и размер каждого символа. Символ в ходит в блок 9х17 пикселей. RAW формат шрифта битмат и имеет 2 разряда цветности. Тоесть бит 0х0 - черный, 0xFF - белый. В БукРу так:
if (font[xo] != 0) SetPixel(xx,yy,color)
Тоесть черный цвет не ставим, а всё остальное ставим пиксел выбранного цвета.
Спустя некоторое время, я реализовал следующее:
if (font[xo] != 0) SetPixel(xx,yy,(u32)((font[xo]) << 24)|((font[xo]) << 16)|((font[xo]) << 8)|(font[xo]));
Этим кодом я добился уже лучшего, тоесть теперья могу использовать 8-битовый шрифт с анти-алиасингом (В официальных версиях БукРу этого нет).
И наконец-то я дошел до того, что бы шрифт не подгонять в рамки блока символа, а использовать его ширину как есть. Что бы это есделать мне понадобилось составить таблицу ширины каждой буквы:
static int font_width[]={
....
10, 10, 10, 10, // 0 1 2 3
10, 10, 10, 10, // 6 5 8 7
10, 10, 6, 6, // 10 9 : ;
...
}
Используя эту таблицу ширины шрифта мы можем получить очень удобную подгонку символов. Достаточно всего лишь правельно указать наш "xx" =)
Вот такие вот дела.
Новая идея реализации шрифта БукРу.
В текущих версиях программы Я использовал стандартный размер шрифта и размер каждого символа. Символ в ходит в блок 9х17 пикселей. RAW формат шрифта битмат и имеет 2 разряда цветности. Тоесть бит 0х0 - черный, 0xFF - белый. В БукРу так:
if (font[xo] != 0) SetPixel(xx,yy,color)
Тоесть черный цвет не ставим, а всё остальное ставим пиксел выбранного цвета.
Спустя некоторое время, я реализовал следующее:
if (font[xo] != 0) SetPixel(xx,yy,(u32)((font[xo]) << 24)|((font[xo]) << 16)|((font[xo]) << 8)|(font[xo]));
Этим кодом я добился уже лучшего, тоесть теперья могу использовать 8-битовый шрифт с анти-алиасингом (В официальных версиях БукРу этого нет).
И наконец-то я дошел до того, что бы шрифт не подгонять в рамки блока символа, а использовать его ширину как есть. Что бы это есделать мне понадобилось составить таблицу ширины каждой буквы:
static int font_width[]={
....
10, 10, 10, 10, // 0 1 2 3
10, 10, 10, 10, // 6 5 8 7
10, 10, 6, 6, // 10 9 : ;
...
}
Используя эту таблицу ширины шрифта мы можем получить очень удобную подгонку символов. Достаточно всего лишь правельно указать наш "xx" =)
Вот такие вот дела.