Запись полосно-перемеженных данных в файл
multibandwrite(data,filename,interleave)
multibandwrite(data,filename,interleave,start,totalsize)
multibandwrite(...,param,value...)
multibandwrite(data,filename,interleave) пишет data, двух- или трехмерный числовой или логический массив, в двоичный файл, заданный как filename. The filename задается как вектор символов или строковый скаляр. Длина третьей размерности data определяет количество полос данных, записанных в файл. Полосы данных записываются в файл в форме, заданной interleave. Дополнительные сведения об этом аргументе см. в разделе Методы чередования.
Если имя файла уже существует, multibandwrite перезаписывает его, если вы не задаете дополнительный offset параметр. Для получения информации о других необязательных параметрах смотрите последний синтаксис и его описание.
multibandwrite(data,filename,interleave,start,totalsize) пишет data в двоичный файл filename в фрагментах. В этом синтаксисе data является подмножеством полного набора данных.
start массив 1 на 3 [firstrow firstcolumn firstband] который задает местоположение для начала записи данных. firstrow и firstcolumn укажите местоположение верхнего левого пикселя изображения. firstband задает индекс первой записываемой полосы. Для примера, data(I,J,K) содержит данные для пикселя в [firstrow+I-1, firstcolumn+J-1] в (firstband+K-1)-й полоса.
totalsize массив 1 на 3, [totalrows,totalcolumns,totalbands], который задает полный, трехмерный размер данных, которые будут записаны в файл.
Примечание
В этом синтаксисе необходимо вызвать multibandwrite несколько раз, чтобы записать все данные в файл. Первый раз это называется, multibandwrite записывает полный файл, используя значение заливки для всех значений за пределами подмножества данных. В каждом последующем вызове multibandwrite перезаписывает эти значения заливки подмножеством данных в data. Параметры filename, interleave, offset, и totalsize должен оставаться постоянным на протяжении всей записи файла.
multibandwrite(...,param,value...) записывает многополосные данные в файл, задавая любую из этих необязательных пар параметр/значение.
Параметр | Описание |
|---|---|
| Вектор символов или строковый скаляр, задающий форму и размер каждого элемента, записанного в файл. Смотрите справку для |
| Количество байтов, пропущенных перед первым элементом данных. Если файл еще не существует, Эта опция полезна при записи заголовка в файл до или после записи данных. При записи заголовка в файл после записи данных откройте файл с |
| Вектор символов или строковый скаляр для управления форматом, в котором данные записываются в файл. Типичные значения |
| Число, указывающее значение, используемое вместо отсутствующих данных. |
interleave является вектором символов или строковым скаляром, который задает, как multibandwrite чередует полосы во время записи данных в файл. Если data двумерный, multibandwrite игнорирует interleave аргумент. В следующей таблице перечислены поддерживаемые методы, и этот пример многополосного файла используется для иллюстрации каждого метода.

Поддерживаемые методы перемежения полос включают в себя перечисленные ниже.
Метод | Задается как | Описание | Пример |
|---|---|---|---|
Полоса - перемежение - по линиям |
| Написание целой строки из каждой полосы | AAAAABBBBBCCCCC AAAAABBBBBCCCCC AAAAABBBBBCCCCC |
Полоса - перемежение на пиксель |
| Запись пикселя из каждой полосы значений | ABCABCABCABCABC... |
Полосно-последовательный |
| Записывайте каждую полосу целиком | AAAAA AAAAA AAAAA BBBBB BBBBB BBBBB CCCCC CCCCC CCCCC |
Примечание
Чтобы успешно запустить эти примеры, вы должны быть в папке с возможностью записи.
Запись всех данных (перемежающихся по линиям) в файл одним вызовом.
data = reshape(uint16(1:600), [10 20 3]); multibandwrite(data,'data.bil','bil');
Запись однополосного мозаичного изображения с одним вызовом для каждой плитки. Это полезно только, если подмножество каждой полосы доступно при каждом вызове multibandwrite.
numBands = 1;
dataDims = [1024 1024 numBands];
data = reshape(uint32(1:(1024 * 1024 * numBands)), dataDims);
for band = 1:numBands
for row = 1:2
for col = 1:2
subsetRows = ((row - 1) * 512 + 1):(row * 512);
subsetCols = ((col - 1) * 512 + 1):(col * 512);
upperLeft = [subsetRows(1), subsetCols(1), band];
multibandwrite(data(subsetRows, subsetCols, band), ...
'banddata.bsq', 'bsq', upperLeft, dataDims);
end
end
end
fread | fwrite | multibandread