Skip to content

BSAVE


将任意数据数组和调色板信息保存到磁盘文件

语法

declare function Bsave ( byref filename as const string, byval source as any ptr, byval size as ulong = 0, byval pal as any ptr = 0, byval bitsperpixel as long = 0 ) as long

用法

result = Bsave( filename, source [,[ size ][,{ pal | pal, bitsperpixel }]] )

参数

filename

用于存储像素和调色板数据的文件名。

source

要存储的数据地址,或 null(0)表示存储当前屏幕工作页面的像素数据。

size

可选,要存储的总字节数。除非输出为BMP文件,否则需要此值。

pal

可选,保存256个 Palette 颜色的缓冲区地址,或 null(0)表示使用当前屏幕调色板。

bitsperpixel

可选,输出BMP图像请求的位深度。若指定了 bitsperpixel,则 pal 也必须指定(至少为 null(0)值),否则会报错。

返回值

成功时返回零(0),失败时返回非零错误码。(触发运行时错误)

说明

Bsave 用于将内存中的任意数据以FB特定的文件格式保存到文件,或将图像保存为标准BMP图像文件,必要时会替换已有文件。

Bsave 只能在初始化图形模式后调用,否则程序会崩溃(在文本模式下工作请参阅 BLOAD/BSAVE 文本模式变通方案)。

Bsavesource 处的 size 字节任意数据输出到指定文件。若 source 为 null(0),则 Bsave 从当前工作页面的像素缓冲区输出最多 size 字节,该缓冲区按当前屏幕模式的内部像素格式构建。(此数据与图像缓冲区格式不兼容,因为它没有头部。)对于8位图像,调色板信息从 pal(若存在且非null)获取,或从当前屏幕调色板获取(若 pal 省略或为null)。

如果 filename 文件扩展名为".bmp"(大小写不敏感),则可以创建BMP图像文件。source 假定指向有效的图像缓冲区,其全部像素数据将存储在BMP文件中。若 source 为 null(0),则存储当前工作页面的内容。对于8位图像,调色板信息从 pal(若非null)获取,或从当前屏幕调色板获取(若为null)。保存BMP文件时忽略 size 参数。

BMP文件的默认位深度:8位(调色板)图像为8位,16位图像为24位,32位图像为32位。可以使用 bitsperpixel 参数请求8位图像输出24位,或32位图像输出24位。

Bsave 返回的错误码可以在下一行用 Err 检查。函数版本的 Bsave 直接以32位 Long 返回错误码。

运行时错误: Bsave 触发以下运行时错误之一:

(1) 非法函数调用

  • size 小于零(0),或 size 为零且 source 非null,或检测到图像缓冲区存在问题。

(2) 找不到文件

  • 无法创建文件。

(3) 文件I/O错误

  • 无法写入文件。

示例

start GeSHi

vb
' Set gfx mode
ScreenRes 320, 200, 32

' Clear with black on white
Color RGB(0, 0, 0), RGB(255, 255, 255)
Cls

Locate 13, 15: Print "Hello world!"

' Save screen as BMP
BSave "hello.bmp", 0

end GeSHi

将图像缓冲区保存为位图文件:

start GeSHi

vb
'set graphics screen 640 x 480 pixels, 32 bit colors
Const W = 640, H = 480 'width & hight
ScreenRes W, H, 32
'draw a smiley at screen center
Circle (W \ 2, H \ 2), 180, &h00ffff00, , , , f 'yellow circle
Circle (W \ 2 - 55, H \ 2 - 70), 35, &h00000000, , , 1.5, f 'left eye
Circle (W \ 2 + 55, H \ 2 - 60), 35, &h00000000, , , 1.5, f 'right eye
Circle (W \ 2, H \ 2 + 80), 70, &h00000000, , , 0.4, f 'mouth
'allocate memory for image buffer
Dim As Any Ptr pImageBuffer = ImageCreate(250, 250)
'copy screen section to buffer
Get (W \ 2 - 125, H \ 2 - 125)-Step(250 - 1, 250 - 1), pImageBuffer
'save image buffer to file
Dim As String fileName = "Smiley.bmp"
If BSave(fileName, pImageBuffer) = 0 Then
    Print "Saved succesful: " + fileName
Else
    Print "Error saving: " + fileName
End If
'free memory for image buffer
ImageDestroy(pImageBuffer)
'keep graphics screen open until key press
Sleep

end GeSHi

与 QB 的差异

  • 保存超过64KiB任意数据的支持是FreeBASIC的新功能。
  • 保存BMP文件的支持是FreeBASIC的新功能。
  • QB无法使用 Bload 加载FreeBASIC中 Bsave 创建的文件,但FreeBASIC可以使用 Bload 加载QB中 Bsave 创建的文件。

另请参阅

  • Bload
  • Palette

返回 目录

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