Skip to content

FreeBASIC 图形库常见问题


FreeBASIC 图形库问题:

返回目录


FreeBASIC 图形库问题

如何链接/使用 Gfxlib?

Gfxlib 是语言的"内置"部分,无需包含任何 .bi 文件或显式链接任何库。当你使用 Screen(图形)Screenres 语句时,FreeBASIC 会检测到你想使用 Gfxlib。因此,要使用 Gfxlib,只需启动一个图形屏幕模式并使用图形命令即可。

返回顶部

fbgfx.bi 头文件是怎么回事?

fbgfx.bi 头文件可供你的程序包含使用,其中包含在使用 Gfxlib 时对程序员有帮助的常量和类型定义。但你不必显式包含此文件来使用 Gfxlib;该头文件只是作为辅助工具提供。它包含可传递给 Screen(图形)Screenres 的模式标志常量,以及键盘扫描码fb.Image 缓冲区结构 的定义。

返回顶部

Get/Put 数组是如何管理的?

在 FreeBASIC 中,图像可以作为数组(如在 QB 中)或作为指针来使用。无论哪种方式,图像数据都包含在一个连续的内存块中。该内存块由一个头部加上图像数据组成。头部有两种类型(旧式和新式),决定了后续图像数据的格式,详情请参见 GfxInternalFormats

返回顶部

为什么 Bsave/Bload 会崩溃?

在 FreeBASIC 中,Bsave/Bload 只能用于加载和保存图形屏幕。它不能用于保存文本模式屏幕。要加载和保存数组,请查看这个使用文件 Get/Put 的代码片段

返回顶部

如何获取颜色的红、绿、蓝或 Alpha 分量?

颜色属性中的每个字节对应红、绿、蓝和 Alpha 分量。以下示例展示了如何从 16、24 或 32 位颜色属性中提取分量值。

start GeSHi

vb
#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

'' Assume a 16, 24, or 32 bit screen mode has been set
c = Point(x, y)
red = rgb_r(c)
green = rgb_g(c)
blue = rgb_b(c)
Alpha = rgb_a(c)

end GeSHi

返回顶部

如何让窗口标题栏的"x"按钮关闭我的应用程序?

在窗口图形模式下,你可以用 Inkey 检测窗口 X(关闭)按钮的按下,检查值 Chr( 255 ) + "k"(这也是 Alt+F4 返回的代码)。这适用于 Win32 和 Linux,在 DOS 中没有"X"按钮。

这里有一个小示例:

start GeSHi

vb
'' "X" close button example , Win32 and Linux only
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 or x-button

end GeSHi

返回顶部

无法在全屏模式下运行使用 Screen 13 或 14 的程序!

这是硬件/驱动程序限制(仅限 Win32 和 Linux?)。现代显卡不再实现那些低分辨率图形模式。如果需要全屏,你应该将其重写为至少使用 Screen 17 或 18,或分辨率为 640x480 或更高,以确保现代硬件能够处理。

返回顶部

为什么 Imagecreate 返回 NULL 指针?

Imagecreate 需要创建一个符合当前屏幕像素格式的图像缓冲区,如果尚未设置屏幕模式,它就无法这样做,因此返回 NULL,这很可能导致后续代码中出现 NULL 指针访问,从而使程序崩溃。

已知当 Imagecreate 在图形库通过调用 Screen(图形)Screenres 初始化之前被调用时,就会发生这种情况。例如,当 Imagecreate 在一个全局构造函数中被调用,而该构造函数在程序主体的 Screen 或 Screenres 调用之前执行时,就可能出现这种情况。在这种情况下,有必要将屏幕初始化也移到一个构造函数中,并确保它在创建图像的构造函数之前执行。

返回顶部

参见

返回目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系