BSAVE
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgBsave
- 最后更新: 2021-09-14
将任意数据数组和调色板信息保存到磁盘文件
语法
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 文本模式变通方案)。
Bsave 将 source 处的 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
' 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", 0end GeSHi
将图像缓冲区保存为位图文件:
start GeSHi
'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
Sleepend GeSHi
与 QB 的差异
- 保存超过64KiB任意数据的支持是FreeBASIC的新功能。
- 保存BMP文件的支持是FreeBASIC的新功能。
- QB无法使用
Bload加载FreeBASIC中Bsave创建的文件,但FreeBASIC可以使用Bload加载QB中Bsave创建的文件。
另请参阅
BloadPalette
返回 目录