Draw String
 
Графический оператор для отображения текста на изображении или на экране.

Синтаксис

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

Использование

Draw String [buffer,] [STEP] (x, y), text [, color]
Draw String [buffer,] [STEP] (x, y), text , , font [, method [, alpha ] ]
Draw String [buffer,] [STEP] (x, y), text , , font, Custom, blender [, parameter]

Параметры

buffer
спрайт для рисования на нем строки. Если данный параметр не используется, строка будет отображена на экране.
STEP
использование относительных координат. Если STEP добавлен, координаты x и y пересчитываются относительно последней точки рисования.
x, y
горизонтальная и вертикальная позиции рисования, относительно левого верхнего угла экрана (если не используется STEP - см выше). Левый верхний угол текста будет нарисован на этой позиции.
text
Строка, содержащая текст для рисования
color
Если шрифт не указан, этот параметр позволяет вам выбрать цвет текста. Если этот параметр опущен, по умолчанию используется Color переднего плана.
Если шрифт указывается, параметр color игнорируется, и сам шрифт определяет цвет для каждого пикселя.
font
буфер изображения, содержащий пользовательский шрифт. Если шрифт не указан, используется стандартный шрифт для текущего текста, и игнорируются следующие параметры.
method | Custom
указывает, как символы шрифта рисуются поверх целевой поверхности. Допускаются те же методы, как и для оператора Put, с той лишь разницей, что по умолчанию используется метод Trans для этой функции. Этот параметр применяется только для пользовательских шрифтов.
alpha
альфа-значение, в диапазоне 0-255. Этот параметр применяется только к методам Add и Alpha.
blender
функция пользовательского смешивания для метода рисования Custom; см. Put (графика) для описания деталей. Этот параметр применяется только к методу Custom.
parameter
Необязательный Pointer(указатель) передаваемый в функцию пользовательского смешивания; Если этот параметр опущен, значение по умолчанию равно нулю (0).

Описание

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

В графическом режиме , эта функция обеспечивает гибкую альтернативу Print. Она имеет несколько ключевых преимуществ:
- Draw String может печатать текст в любых координатах на экране, тогда как Print ограничен к сетке символов, доступной по Locate.
- Print переопределяет фон за текстом текущим цветом фона. Draw String не делает этого: она оставляет пиксели на фоне нетронутыми.
- Как и Put, Draw String имеет несколько различных методов для печати текста, такие как Alpha и Custom.
- Draw String не ограничивается одним набором символов: можно поставить специальный шрифт, который будет использоваться вместо этого.

Примечание: Если пользовательский шрифт не используется, Draw String по умолчанию будет использовать стандартный шрифт, используемый для Print, с размером знаков диктуемых с помощью Width. method - если передается - будет игнорироваться, и текст будет нарисован с поставляемым цветом, с прозрачным фоном.

Формат пользовательских шрифтов:
Шрифт хранится в стандартном буфере Get/Put; шрифт должен храниться в буфере с использованием той же глубины цвета как и текущая глубина цвета экрана, в противном случае Draw String натолкнется на ошибку runtime во время вызова функции.

В первой строке пикселей в буфере , шрифт содержит заголовок шрифта, на байтовой основе (не пиксель). Самый первый байт определяет версию заголовка шрифта; в настоящее время он должен быть 0. Второй байт определяет ASCII код первого поддерживаемого символа в шрифте; Третий байт определяет ASCII код последнего поддерживаемого символа в шрифте. Таким образом, если шрифт поддерживает полный диапазон 0-255, эти два байта будут содержать 0 и 255.
Далее идет ширина каждого из поддерживаемых символов, в каждом байте. Если шрифт содержит 96 символов, начиная от 32 до 127 (включительно), заголовок будет иметь первые три байта 0, 32 и 127, и далее 96 байт, задающих ширину соответствующих символов.

Высота шрифта вычисляется вычитанием 1 из высоты буфера, то есть, 1 строка пикселей определяет заголовок , остальные строки как раз складываются в высоту шрифта. Размер буфера должен быть достаточным, чтобы вместить все поддерживаемые символы в одной строке, один за другим.

Пример

Это простой пример использования Draw String: используется для печати "Hello world" в центре экрана:
Const w = 320, h = 200 '' размеры экрана

Dim x As Integer, y As Integer, s As String

'' Откроем графический экран
ScreenRes w, h

'' Нарисуем строку в центре экрана:

s = "Hello world"
x = (w - Len(s) * 8) \ 2
y = (h - 1 * 8) \ 2

Draw String (x, y), s

'' Ожидаем нажатия клавиши для завершения программы
Sleep



Этот пример показывает, как создать и использовать свой собственный шрифт. Для простоты, он использует Draw String с шрифтом по умолчанию для создания глифов.
'' Определяем диапазон символов
Const FIRSTCHAR = 32, LASTCHAR = 127

Const NUMCHARS = (LASTCHAR - FIRSTCHAR) + 1
Dim As UByte Ptr p, myFont
Dim As Integer i

'' Открываем графический экран 256 цветов (320*200)
ScreenRes 320, 200, 8

'' Создание пользовательского шрифта в буфере

myFont = ImageCreate(NUMCHARS * 8, 9)

 '' Поместим заголовок шрифта в начале пиксельных данных

#ifndef ImageInfo '' более старые версии FB не имеют функцию ImageInfo
p = myFont + IIf(myFont[0] = 7, 32, 4)
#else
ImageInfo( myFont, , , , , p )
#endif

p[0] = 0
p[1] = FIRSTCHAR
p[2] = LASTCHAR

 '' Поместим каждый символ в шрифт и обновим информацию о ширине
For i = FIRSTCHAR To LASTCHAR
    
    '' Здесь мы могли бы определить настраиваемую ширину для каждой буквы, но для простоты мы используем
    '' фиксированную ширину 8, так как мы клонируем глифы шрифта по умолчанию
    p[3 + i - FIRSTCHAR] = 8
    
    '' Создаем символы в буфере пользовательского шрифта путем рисования с использованием шрифта по умолчанию
    Draw String myFont, ((i - FIRSTCHAR) * 8, 1), Chr(i), 32 + (i Mod 24) + 24
    
Next i

'' Теперь буфер шрифта готов; мы могли бы сохранить его с помощью BSAVE для последующего использования
Rem BSave "myfont.bmp", myFont

'' Здесь мы рисуем строки с помощью пользовательского шрифта
Draw String (10, 10), "ABCDEFGHIJKLMNOPQRSTUVWXYZ", , myFont
Draw String (10, 26), "abcdefghijklmnopqrstuvwxyz", , myFont
Draw String (66, 58), "Hello world!", , myFont

'' Освободим память, используемую под шрифт
ImageDestroy myFont

Sleep



Отличия от QB

  • Новое в FreeBASIC

См. также