FreeBasic
Главная
Вход
Регистрация
Четверг, 28.03.2024, 21:17Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Freebasic » Вопросы по языку FreeBasic » Текст в графических режимах
Текст в графических режимах
HemuloДата: Четверг, 21.03.2013, 23:29 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 6
Репутация: 0
Статус: Offline
В таблице описания графических режимов написано что-то вроде:
| №  |разрешение| кол-во символов  |размер  символа| Цвет|
| 20 | 1024x768 | 128x48 or 128x96 |  8x16 or 8x8  | 256 |


Это для команды установки графических режимов Screen.

Есть ещё более интересная команда Screenres с помощью которой можно явно указывать разрешение экрана в точках.
Код
ScreenRes width, height [, [depth][, [num_pages] [, [flags][, refresh_rate ]]]]


Это мне показалось интересным, поскольку у меня экран монитора имеет разрешение 1680x1050 px.

И я прекрасно разворачиваю screen на весь свой экран:
Screenres 1680,1050,32,2,1
(разрешение моё, цвет 32, 2 - экранных страницы, на весь экран)

Но вот у меня возник вопрос:
При заданном разрешении 1680x1050 px у меня на экране с помощью
Print можно вывести около 130 строк при 210 колонках.

Расчёт показывает что размер одного стандартного символа составляет 8х8 пикселей. Это соответствует одному из упомянутых в таблице размеру символа.

Вопрос в том, как переключиться в режим отображения символов с размером 8х16 пикселей?

Кстати, я проверил режим команды Screen 20, который соответствует разрешению 1024x768 и получил на выходе 128x48 символов.

Это соответствует размеру символа 8x16 пикселей.

Соответственно здесь вопрос обратный, как переключиться в режим отображения символов 8х8 пикселей?

Ни в описании функции Print ни в описании Screen, Screenres нет ничего про текстовые шрифты.

Я читал в документации по графическому режиму что-то про команду Draw String.

Но насколько я понял, у этой команды немного другие особенности (например позиционирование не по знакоместам, а по пикселям).
И про изменение типа шрифта 8х16 <-->8х8 там тоже ничего не было написано.

В описании есть какое-то упоминание параметра для установки шрифта, но я не нашёл никакого примера, чтобы понять как именно там задаётся шрифт и его размер.

Приведу описание из мануала, которое я не очень понял:

Код
Draw String [buffer,]  [STEP](x, y), text [,color [, font [, method [, (alpha|blender) [, parameter] ] ] ] ]
font

an image buffer containing a custom font. If no font
is supplied, the standard font for the current text resolution is used,
and the following parameters are ignored.

method | Custom
specifies how the font characters are drawn on top of the target surface. The same methods as found for the Put statement are allowed, with the only difference that the default method is Trans for this function. This parameter only applies to custom fonts.

По этому тексту могу сказать, что я понимаю использованные тут слова, но совершенно не понимаю смысла. Как всё это работает?


Сообщение отредактировал Hemulo - Четверг, 21.03.2013, 23:33
 
haavДата: Пятница, 22.03.2013, 10:36 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата (Hemulo)
Вопрос в том, как переключиться в режим отображения символов с размером 8х16 пикселей?

Для этих целей есть функция Width, кстати в справке к этой функции как раз есть пример переключения размера шрифтов.

Цитата (Hemulo)
По этому тексту могу сказать, что я понимаю использованные тут слова, но совершенно не понимаю смысла. Как всё это работает?

Для функции Draw String используются точечные BMP шрифты. То есть всё создание изображения шрифта возлагается на программиста. Для этих целей написали конвертер TTF в BMP и что еще лучше библиотеку XFONT (скачать можно здесь).

Что касается method | Custom то это метод отрисовки текста. Более подробно о методах отрисовки с готовым примером можно посмотреть функцию PUT . Custom - это пользовательский метод отрисовки в своей процедуре. Если используется метод Custom , то следующим параметром должен быть указатель на процедуру , в которой будет пользовательская отрисовка. Последний параметр всего лишь указатель на нужные данные , которые программист может передать в процедуру при желании. Как-то так smile


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
HemuloДата: Пятница, 22.03.2013, 12:38 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 6
Репутация: 0
Статус: Offline
Цитата (haav)
Для этих целей есть функция Width, кстати в справке к этой функции как раз есть пример переключения размера шрифтов.

Я сейчас порылся в мануалах на http://www.freebasic.net но не нашёл описания.

Возможно я туплю, но не могли бы вы кинуть прямую ссылку?

Добавлено (22.03.2013, 12:38)
---------------------------------------------
вот, кажется нашёл что-то:

Код
Dim As Integer breit, hoch
ScreenInfo breit, hoch
Width breit\8, hoch\16
 
haavДата: Пятница, 22.03.2013, 12:47 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
А справку в CHM формате вы не используете?

Есть в принципе и онлайн справка, в частности функция WIDTH


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
HemuloДата: Пятница, 22.03.2013, 13:23 | Сообщение # 5
Рядовой
Группа: Пользователи
Сообщений: 6
Репутация: 0
Статус: Offline
Я просто с разных компьютеров захожу, поэтому предпочитаю онлайн справки.

Спасибо за ссылку, я понял, что не там искал. wink

Я тут после своего предыдущего сообщения накидал простенькую программку :

Код
Dim as integer w, h, C=16

Screenres 640,480,32,1,1

ScreenInfo w, h  

Width w\8, h\C  

For i as integer = 1 to w\8
     Print "A";
Next i

Sleep
Потом немного модифицировал её и прогнал в циклах с различными значениями.
В итоге, я заметил, что для разрешения 640,480 С может принимать только одно из 3 значений 8,14,16
При всех других значениях выводятся символы 8х8 но при разном количестве строк (внизу остаётся пустое место).
Соответственно и изменение количества символов по ширине тоже не приводит ни к каким изменениям.

Думаю, что для других разрешений будет подобная картина.

В целом, тот факт, что поддерживаются только символы 8х8, 8х14 и 8х16 совсем не удевителен, т.к. именно такие размеры символов были у стандартных текстовых режимов мониторов и видимо стандартные шрифты тоже заточены именно под них.

Интересно то как программа отрабатывает нестандартные размеры, например при задании С=15 или С=32 и т.п.

Символы которые выводятся на экран, как я уже сказал, имеют размер 8х8, хотя мне казалось что будет подбираться ближайший меньший размер. (для С=15 8х14, для С=32 8х16 и т.п.)

Но вообще-то это конечно не важно.
Ещё раз спасибо за подсказку.
Буду играться дальше. smile
 
Форум » Freebasic » Вопросы по языку FreeBasic » Текст в графических режимах
  • Страница 1 из 1
  • 1
Поиск: