Загружает произвольные данные из файла, созданного с помощью
BSave,
или совместимый файл изображения BMP.
Синтаксис
Использование
result = BLoad( filename [, [ dest ] [, pal ] ] )
Параметры
filename
имя файла для загрузки изображения;
можно включить путь к файлу
dest
расположение в памяти для загрузки изображения, или null
(0) для копирования изображения на текущую рабочую страницу
графического экрана
pal
ячейка памяти для загрузки палитры, или нуль (0), чтобы
изменить текущую палитру графического экрана, если он использует
ее
Возвращаемое значение
Описание
BLoad может использоваться для загрузки данных изображения или
любых других данных из файла, созданного с помощью
BSave,
и сохранить эти данные в массив, или нарисовать их в окно. Если
dest
отсутствует или имеет значение null (
0), данные изображения
копируется в текущую рабочую страницу графического экрана. В противном
случае данные будут загружены как данные изображения по адресу, указанному в
dest.
BLoad может загрузить 3 различных типа файлов:
- Старые QB-подобные данные файла, сохраненные с помощью BSAVE
из кода QB, содержащие "raw" данные , которым предшествует
7-байтовый заголовок, начинающий с &HFD, до 64 КБ в
размере
- Новые FB-подобные данные файла, сохраненные с помощью BSave
из кода FB, содержащие "raw" данные , которым предшествует 5-байтовый заголовок,
начинающий с &HFE. Нет 64 КБ предела с этим форматом
- BMP файлы изображений, поддерживающие подмножество действительных ("Windows") .BMP
файлов, начинающиеся с "BM", сохраненные из FB
кода с помощью BSave, или
созданные\сохраненные в совместимом формате с помощью графического редактора /
конвертера.
QB-подобные данные и файлы BMP преобразуются в FB-совместимый формат
изображения при открытии.
8-битовые файлы изображений или ниже содержат палитру, которая описывает
значения цвета, используемое в изображениях. Если
pal не
нуль (
0), палитра копируется в память, начиная с указанного адреса.
В противном случае если текущий графический экран использует палитру , тогда
его палитра заменяется на палитру из файла изображения.
При использовании одного из 2 "не-BMP" форматов файлов для сохраненнных
изображений, файлы изображения должны быть созданы с помощью
BSave
в том же режиме графического экрана как она загружена. При использовании
формата файла BMP, это ограничение не применяется.
При загрузке файла BMP с помощью
BLoad, изображения должны
быть полноцветными (15-, 16-, 24- или 32-бит на пиксель
) или палитризованные / индексируемые (8-бит или ниже). Данные
изображения будут преобразованы в необходимый формат пикселя для текущей
глубины цвета, за исключением того, что полноцветные не могут быть
преобразованы в палитризованные изображения.
BLoad не
поддерживает файлы BMP с помощью сжатия RLE или другой тип файла изображения (PNG, JPG, GIF, ...).
BLoad
загрузит данные альфа-канала, если таковые имеются из 32-битного BMP файла с
BITMAPV4HEADER
или
BITMAPV5HEADER файловым заголовком.
Runtime ошибки:
BLoad создает одну из следующих
runtime ошибок:
(1) Illegal function call
- dest не был указан или null (0), и графический
экран не был установлен.
- Растровое изображение использует неподдерживаемый тип сжатия файла BMP (BI_RLE4, BI_RLE8)
- Растровое изображение является полноцветным (16, 24, или 32 бит на пиксель)
, а текущий графический экран использует палитру (8 бит на пиксель или ниже).
(2) File not found
- Файл filename не может быть найден.
(3) File I/O error
- Файл не имеет любой из поддерживаемых типов
- Произошла общая ошибка чтения.
Примечание: При использовании BLoad для загрузки
файла BMP в буфер изображения, оригинальные размеры изображения не
изменяются. Если вы хотите иметь буфер изображения с такими же размерами,
что и файл BMP, вы должны заранее подобрать размеры, и создать изображение
нужного размера самостоятельно. Смотрите ниже пример
как это сделать.
Пример
'Загрузить графический объект на текущую рабочую
страницу
Screen 18, 32
Cls
BLoad "picture.bmp"
Sleep
'Загрузить изображение растрового изображения 48 x 48
ScreenRes 320, 200, 32
Dim myImage As Any Ptr = ImageCreate( 48, 48 )
BLoad "picture.bmp", myImage
Put (10,10), myImage
ImageDestroy( myImage )
Sleep
ScreenRes 640, 480, 8 '' графический
экран с 8-битовой палитрой
Dim pal(0 To 256-1) As Integer '' 32-битный
целочисленный массив с ячейкой для 256 цветов
'' Загрузить растровое изображение на экран, положив
палитру в массив pal()
BLoad "picture.bmp", , @pal(0)
WindowTitle "Old palette"
Sleep
'' Установка новой палитры из массива pal()
Palette Using pal(0)
WindowTitle "New palette"
Sleep
'' Функция, которая создает буфер изображения с теми же
'' размерами как у изображения в формате BMP, и
загружает файл.
Const NULL As Any Ptr = 0
Function bmp_load( ByRef filename As Const String ) As Any Ptr
Dim As Integer filenum, bmpwidth, bmpheight
Dim As Any Ptr img
'' открыть файл BMP
filenum = FreeFile()
If Open( filename For Binary Access Read As #filenum ) <> 0 Then Return NULL
'' получить
размеры BMP
Get #filenum, 19, bmpwidth
Get #filenum, 23, bmpheight
Close #filenum
'' создать изображение с размерами BMP
img = ImageCreate( bmpwidth, Abs(bmpheight) )
If img = NULL Then Return NULL
'' Загрузить файл BMP
в буфер изображения
If BLoad( filename, img ) <> 0 Then ImageDestroy( img ): Return NULL
Return img
End Function
Dim As Any Ptr img
ScreenRes 640, 480, 32
img = bmp_load( "picture.bmp" )
If img = NULL Then
Print "bmp_load failed"
Else
Put (10, 10), img
ImageDestroy( img )
End If
Sleep
Отличия от QB
- Поддержка загрузки файлов BMP является новой для FreeBASIC.
- Поддержка получения палитры из BMP-файлов является новой для FreeBASIC.
- FreeBASIC использует другой формат файла, который не имеет предела 64 КБ,
в отличие от внутреннего формата QBASIC.
См. также