📄 hdr.bff
字号:
EXPRE !!!!!!@DataHist.ExpiryTime = unzerostring(@DataHist.ExpiryTime);
EXPRE !!!!!!@DataHist.Hist_UN0 = unzerostring(@DataHist.Hist_UN0);
# remaining fixed fields
FIELD ! !int32 !double !1, 1 ! !DataHist.Views # 0x013c, 0
FIELD ! !int32 !double !1, 1 ! !DataHist.VolumesAdded # 0x0140, 0
FIELD ! !int32 !double !1, 1 ! !DataHist.StartField # 0x0144, 0
FIELD ! !int32 !double !1, 1 ! !DataHist.FieldSkip # 0x0148, 0
FIELD ! !int32 !double !1, 1 ! !DataHist.OMax # 0x014c, 0
FIELD ! !int32 !double !1, 1 ! !DataHist.OMin # 0x0150, 0
FIELD ! !int32 !double !1, 1 ! !DataHist.SMax # 0x0154, 0
FIELD ! !int32 !double !1, 1 ! !DataHist.SMin # 0x0158, 0 [length: 0x15c = 348 bytes]
ELOOP ! ! ! ! ! !Analyze75
# # # # # ANALYZE 7.5 / NIFTI BREAK # # # # #
# header fields for DataHistory (NIftI: nii, ni1, n+1)
BLOOP !@NIIFileType > 0 ! ! !1 ! !NiftiHeader
FIELD ! !int16 !double !1, 1 ! !DataHist.NIftI1.QFormCode # 0x00fc, ...
FIELD ! !int16 !double !1, 1 ! !DataHist.NIftI1.SFormCode # 0x00fe, ...
FIELD ! !single !double !1, 1 ! !DataHist.NIftI1.QuaternionB # 0x0100, ...
FIELD ! !single !double !1, 1 ! !DataHist.NIftI1.QuaternionC # 0x0104, ...
FIELD ! !single !double !1, 1 ! !DataHist.NIftI1.QuaternionD # 0x0108, ...
FIELD ! !single !double !1, 1 ! !DataHist.NIftI1.QuatOffsetX # 0x010c, ...
FIELD ! !single !double !1, 1 ! !DataHist.NIftI1.QuatOffsetY # 0x0110, ...
FIELD ! !single !double !1, 1 ! !DataHist.NIftI1.QuatOffsetZ # 0x0114, ...
FIELD ! !single !double !1, 4 ! !DataHist.NIftI1.AffineTransX # 0x0118, ...
FIELD ! !single !double !1, 4 ! !DataHist.NIftI1.AffineTransY # 0x0128, ...
FIELD ! !single !double !1, 4 ! !DataHist.NIftI1.AffineTransZ # 0x0138, ...
FIELD ! !char !char !1, 16 ! !DataHist.NIftI1.IntentName # 0x0148, '' + \0 * 16
FIELD ! !char !char !1, 4 ! !DataHist.NIftI1.NIftIMagic # 0x0158, 'ni1' + \0 **OR** 'n+1' + \0
EXPRE !$BFFREAD !!!!!$IntermediateData = @ImgDim.VoxOffset - 348; @IntermedData = uint8([]);
FIELD !$IntermediateData > 0 !uint8 !uint8 !1, $IntermediateData ! !IntermedData # 0x015c, []
# correctly handle fixed length strings
EXPRE !!!!!!@DataHist.Description = unzerostring(@DataHist.Description);
EXPRE !!!!!!@DataHist.AuxFilename = unzerostring(@DataHist.AuxFilename);
EXPRE !!!!!!@DataHist.NIftI1.IntentName = unzerostring(@DataHist.NIftI1.IntentName);
EXPRE !!!!!!@DataHist.NIftI1.NIftIMagic = unzerostring(@DataHist.NIftI1.NIftIMagic);
ELOOP ! ! ! ! ! !NiftiHeader
# # # # # NIFTI END # # # # #
# voxel data of older formats as transio
EXPRE !!!!!!$dsize = @ImgDim.Dim(2:@ImgDim.Dim(1) + 1); if numel($dsize) == 1, $dsize(2) = 1; end, try, if @ImgDim.DataType < 256, $dtype = @ImgDim.DataType; else, $dtype = fix(@ImgDim.DataType / 256); end, switch ($dtype), case {2}, $dtype = 'uint8'; case {4}, $dtype = 'int16'; case {8}, $dtype = 'int32'; case {16}, $dtype = 'single'; case {64}, $dtype = 'double'; case {130}, $dtype = 'int8'; case {132}, $dtype = 'uint16'; case {136}, $dtype = 'uint32'; otherwise, error('BAD_DATATYPE'); end, catch, $dtype = ''; end
EXPRE !$BFFREAD !!!!!if ~isempty($dtype); try, if @NIIFileType < 2, [text{1:3}] = fileparts($FILENAME); if any(text{3}(2:end) == upper(text{3}(2:end))), timfile = [text{1} '/' text{2} '.IMG']; else, timfile = [text{1} '/' text{2} '.img']; end, else, oldfpos = ftell(fid); fclose(fid); timfile = $FILENAME; end, if exist(timfile, 'file') == 2, try, @VoxelData = transio(timfile, @Endian, $dtype, @ImgDim.VoxOffset, $dsize); end, if @NIIFileType == 2, fid = fopen($FILENAME, 'r', @Endian); fseek(fid, oldfpos, -1); end, end, end, end
EXPRE !$BFFWRITE !!!!!if ~isempty(@VoxelData) && ~isempty($dtype) && strcmpi($dtype, class(@VoxelData)), try, if @NIIFileType < 2, [text{1:3}] = fileparts($FILENAME); if any(text{3}(2:end) == upper(text{3}(2:end))), timfile = [text{1} '/' text{2} '.IMG']; else, timfile = [text{1} '/' text{2} '.img']; end, else, oldfpos = ftell(fid); timfile = $FILENAME; end, if istransio(@VoxelData), tiostr = struct(@VoxelData); tiodata = reshape(@VoxelData(:), size(@VoxelData)); if @NIIFileType ~= 2, if ~strcmpi(tiostr.FileName, timfile) || (~ispc && ~strcmp(tiostr.FileName, timfile)), if exist(timfile, 'file') ~= 2, opmode = 'w'; else, opmode = 'r+'; end, nfid = fopen(timfile, opmode, @Endian); if @ImgDim.VoxOffset > 0, try, fseek(fid, @ImgDim.VoxOffset, -1); end, end, nfpos = ftell(nfid); if nfpos < @ImgDim.VoxOffset, fseek(nfid, 0, 1); fwrite(nfid, uint8(zeros(1, @ImgDim.VoxOffset - ftell(nfid))), 'uint8'); end, fwrite(nfid, tiodata, $dtype); fclose(nfid); try, @VoxelData = transio(timfile, @Endian, $dtype, @ImgDim.VoxOffset, $dsize); catch, warning('transio re-open failed.'); end, end, else, ofpos = ftell(fid); if ofpos > @ImgDim.VoxOffset, @ImgDim.VoxOffset = ofpos; else, fwrite(fid, uint8(zeros(1, @ImgDim.VoxOffset - ofpos)), 'uint8'); end, fwrite(fid, tiodata, $dtype); tiostr.FileName = $FILENAME; if strcmpi(@Endian, 'ieee-le'), tiostr.LittleND = true; else, tiostr.LittleND = false; end, tiostr.IOOffset = @ImgDim.VoxOffset; @VoxelData = transio(0, 'makeobject', tiostr); end, else, if @NIIFileType == 2, ofpos = ftell(fid); if ofpos > @ImgDim.VoxOffset, @ImgDim.VoxOffset = ofpos; elseif ofpos < @ImgDim.VoxOffset, fwrite(fid, uint8(zeros(1, @ImgDim.VoxOffset - ofpos)), 'uint8'); end, fwrite(fid, @VoxelData, $dtype); fseek(fid, ofpos, -1); else, nfid = fopen(timfile, 'w', @Endian); if @ImgDim.VoxOffset > 0, fwrite(nfid, uint8(zeros(1, @ImgDim.VoxOffset)), 'uint8'); end, fwrite(nfid, @VoxelData, 'uint8'); fclose(nfid);end, end, end, end
EndListOfFields
NewFileCode:!
@Endian = 'ieee-le';
@FileMagic = '';
@NIIFileType = 0;
@HdrKey.SizeOfHdr = 348;
@HdrKey.DataType = 'dsr';
@HdrKey.DBName = '';
@HdrKey.Extents = 0;
@HdrKey.SessionError = 0;
@HdrKey.Regular = 'r';
@HdrKey.SliceOrdering = int8(0);
@ImgDim.Dim = [4, 0, 0, 0, 1, 0, 0, 0];
@ImgDim.IntentParam1 = 0;
@ImgDim.IntentParam2 = 0;
@ImgDim.IntentParam3 = 0;
@ImgDim.IntentCode = 0;
@ImgDim.DataType = 4;
@ImgDim.BitsPerPixel = 16;
@ImgDim.FirstSliceIndex = 0;
@ImgDim.PixSpacing = [0, 1, 1, 1, 1, 0, 0, 0];
@ImgDim.VoxOffset = 0;
@ImgDim.ScalingSlope = 1;
@ImgDim.ScalingIntercept = 0;
@ImgDim.LastSliceIndex = 0;
@ImgDim.SliceTimeOrder = int8(0);
@ImgDim.NIftIUnits = int8(0);
@ImgDim.CalMaxDisplay = 32767;
@ImgDim.CalMinDisplay = -32768;
@ImgDim.SliceDuration = 0;
@ImgDim.SliceTimeOffset = 0;
@ImgDim.GLMax = 32767;
@ImgDim.GLMin = -32768;
@DataHist.Description = 'New image created with BVQXtools';
@DataHist.AuxFilename = '';
@DataHist.Orientation = int8(0);
@DataHist.Originator = uint8(zeros(1, 10));
@DataHist.OriginSPM = zeros(1, 5);
@DataHist.OriginString = '';
@DataHist.Generated = '';
@DataHist.ScanNumber = '';
@DataHist.PatientID = '';
@DataHist.ExpiryDate = '';
@DataHist.ExpiryTime = '';
@DataHist.Hist_UN0 = '';
@DataHist.Views = 0;
@DataHist.VolumesAdded = 0;
@DataHist.StartField = 0;
@DataHist.FieldSkip = 0;
@DataHist.OMax = 0;
@DataHist.OMin = 0;
@DataHist.SMax = 0;
@DataHist.SMin = 0;
@DataHist.NIftI1 = struct;
@DataHist.NIftI1.QFormCode = 3;
@DataHist.NIftI1.SFormCode = 3;
@DataHist.NIftI1.QuaternionB = 0;
@DataHist.NIftI1.QuaternionC = 0;
@DataHist.NIftI1.QuaternionD = 0;
@DataHist.NIftI1.QuatOffsetX = 0;
@DataHist.NIftI1.QuatOffsetY = 0;
@DataHist.NIftI1.QuatOffsetZ = 0;
@DataHist.NIftI1.AffineTransX = [1, 0, 0, 0];
@DataHist.NIftI1.AffineTransY = [0, 1, 0, 0];
@DataHist.NIftI1.AffineTransZ = [0, 0, 1, 0];
@DataHist.NIftI1.IntentName = '';
@DataHist.NIftI1.NIftIMagic = 'nii';
@IntermedData = uint8([]);
@VoxelData = int16(zeros(@ImgDim.Dim(2:1+@ImgDim.Dim(1))));
EndNewFileCode
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -