Часто задаваемые вопросы по графической библиотеке FreeBASIC
 



Вопросы о графической библиотеке FreeBASIC:



Вопросы о графической библиотеке FreeBASIC


Как линковать/использовать  Gfxlib?
Gfxlib "встроена" в язык, не требуется никаких включаемых .bi файлов. FreeBASIC автоматически определяет использование Gfxlib , когда вы вызываете функцию Screen или ScreenRes. Таким образом, для того чтобы использовать Gfxlib графические команды, вам просто нужно инициализировать экран.

К началу страницы

Что можно сказать о заголовочном файле fbgfx.bi?
Файл заголовка fbgfx.bi доступен для включения по вашей программе, и содержит константы и определения типов, которые могут оказаться полезными для вас при использовании Gfxlib. Совсем не обязательно подключать его для того, чтобы использовать Gfxlib; заголовок доступен только в качестве вспомогательного средства. Он содержит константы флагов, которые могут передаваться в Screen и ScreenRes, а также определения Клавиатурных сканкодов и структуру fb.Image буфера.

К началу страницы

Как управлять массивами с помощью Get/Put?
В FreeBASIC, изображения могут использоваться как массивы (как, например, в QB) или управляться при помощи указателей. В то же время, данные изображений, находятся в одном блоке. Блок состоит из заголовка данных изображения. Заголовок может быть двух видов (старый стиль и новый стиль). Он определяет формат данных изображений, для получения более подробной информации см. GfxInternalFormats.

К началу страницы

Почему при использовании функций Bsave/Bload программа вылетает?
Bsave/Bload могут быть использованы только для загрузки и сохранения графических экранов и графических буферов в FreeBASIC. Они не могут быть использованы для сохранения экрана в текстовом режиме. Чтобы загрузить и сохранить массивы читайте подсказку для использования файловых Get/Put .

К началу страницы

Можно ли получить красный, зеленый, синий, или альфа компонент цвета?

Каждый байт в атрибуте цвета содержит красный, зеленый, синий и альфа компоненты. В следующем примере показано, как извлечь составные значения из 16, 24 или 32 битного атрибута цвета.

#define rgb_a(x) ((x) Shr 24)
#define rgb_r(x) ((x) Shr 16 And 255)
#define rgb_g(x) ((x) Shr 8 And 255)
#define rgb_b(x) ((x) And 255)

Dim As UInteger c
Dim As Integer x, y
Dim As UByte red, green, blue, Alpha

'' Предполагается, что ранее в коде вы установили 16 , 24 или 32 битный режим экрана
c = Point(x, y)
red = rgb_r(c)
green = rgb_g(c)
blue = rgb_b(c)
Alpha = rgb_a(c)


К началу страницы

Как получить событие клика по кнопке "x" в заголовке окна для закрытия приложения?
В оконном режиме графики вы можете вы можете проверить нажата ли кнопка Х (закрыть) в заголовке окна при помощи функции Inkey, сравнив результат функции со значением Chr( 255 ) + "k" (по сути это тоже, что и Alt+F4). Это относится к платформам Win32 и Linux. Что касается DOS, то там нет кнопки "X" в заголовке окна.

Маленький пример:

'' Пример закрытия окна по нажатию "X" кнопки , Win32 и Linux только
Dim As String key
Screen 13
Do
  Print "Click the 'x' to close this app."
  Sleep
  key = Inkey
Loop Until key = Chr(27) Or key = Chr(255, 107) 'escape или x-кнопка в заголовке окна


К началу страницы

Почему не получается запускать Screen 13 или 14 в полноэкранном режиме?
Это - ограничение аппаратных средств/драйвера (Win32 и Linux только?). В наше время видеокарты не осуществляют такие способы для графики с низким разрешением. Если требуется полный экран, вы должны переписать инициализацию экрана, по крайней мере с режимом 17 или 18 или разрешением 640x480 и выше для того, чтобы современные аппаратные средства смогли обращаться с ним.

К началу страницы

Почему Imagecreate возвращает "ПУСТОЙ" указатель?
ImageCreate создает буфер изображения, который соответствует пиксельному формату текущего экрана, и он не может создать его, если еще не установлен один из режимов экрана с помощью Screen или ScreenRes. В результате функция возвращает нулевой (пустой) указатель, при обращении к которому программа по понятным причинам вылетает.

Как итог, вам попросту нужно вызвать функцию Screen или ScreenRes для использования ImageCreate.

К началу страницы

См. также