Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шрифт TrueType определенного размера, переконвертировать в битовую маску 
:(
    Опции темы
Dreamer_0x01
Дата 16.11.2005, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 12



нужно получить битовую маску нужных мне символов выбранного мной шрифта.

Пока что думаю сделать следующим образом:
1. Нарисовать нужный мне символ в прямоугольнике определенного размера (мне надо 8х16).
2. Oбработать посимвольно каждый пиксел функцией GetPixel(), проставляя соответственно в битовой маске нули и единицы..

так поступить с каждым символом.


Но может быть, есть какие-то стандартные методы?



--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Earnest
Дата 16.11.2005, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Да уж, GetPixel у DC спрашивать - не самый лучший путь (медленно - жуть!).
Вариант 1. Прорисовать как ты сказал, но в memory context + свой Bitmap, а потом сразу попросить все биты (GetBitmapBits).
Вариант 2 ( для продвинутых). См. GetGlyphOutline:
Цитата
The GetGlyphOutline function retrieves the outline or bitmap for a character in the TrueType font that is selected into the specified device context

Т.е. прямо можно получить битмап для символа.



--------------------
...
PM   Вверх
Dreamer_0x01
Дата 16.11.2005, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 12



Цитата(Earnest @ 16.11.2005, 20:25)
медленно - жуть!


Это пофигу, операция выполняется только один раз для каждого символа кодовой таблицы при запуске программы, и все.


Цитата(Earnest @ 16.11.2005, 20:25)
Т.е. прямо можно получить битмап для символа

А что отом с этим битмапом делать? Как его "расшифровать"?

Мне собственно что нужно...
Допустим, есть символ, вписанный в прямоугольник 8х8;
нужно заполнить массив типа
unsigned short Ar[8]={
0x00FF,//вся строка черная
0x00FF,//вся строка черная
0x00FF,//вся строка черная
0x00C3,//в центре 4 пробела
0x00C3,//в центре 4 пробела
0x00FF,//вся строка черная
0x00FF,//вся строка черная
0x00FF,//вся строка черная
}

где элементы массива означают строки в битовой маске, а биты в элементах - точки в строках
(В данном примере это будет небольшое пятно в центре битовой маски).



--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Earnest
Дата 17.11.2005, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Битмап (черно-белый) и есть битовая маска, которая тебе нужна. Учти только, что строки в битмапе должны быть выровнены на WORD.
Размер выровненной строки вычисляется так:
Код

size_t BmpLineSize(UINT nWidth, UINT nBitCnt)
{ 
    size_t nLine = nWidth*nBitCnt/8; 
    if (nLine & 1) ++nLine; 
    return nLine; 
}

Соответственно, размер буфера под биты = размер строки * высота.





--------------------
...
PM   Вверх
Dreamer_0x01
Дата 17.11.2005, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 12



Я понимаю, что битовая маска, но она будет "чистая", или как и файл bmp, содержать в каких-то первых строках служебную информацию?


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Earnest
Дата 17.11.2005, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Биты, которые ты получаешь с помощью GetBitmapBits - это ровно содержание, т.е. нужная тебе маска, нет там никакого заголовка.


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0432 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.