@niivue/niivue
Version:
minimal webgl2 nifti image viewer
83 lines (77 loc) • 2.63 kB
text/typescript
/**
* ImageMetadata module
*
* Handles image metadata access and configuration management.
* This module contains functions for:
* - Getting NIfTI metadata (dimensions, datatypes, etc.)
* - Getting and updating image options
* - Managing image configuration settings
*/
import type { NVImage } from './index'
import type { ImageMetadata as ImageMetadataType, ImageFromUrlOptions } from '@/nvimage/utils'
import { NVImageFromUrlOptions } from '@/nvimage/utils'
/**
* Get NIfTI specific metadata about the image
*
* @param nvImage - The NVImage instance
* @returns Object containing image metadata (dimensions, datatypes, etc.)
* @throws Error if header is undefined
*/
export function getImageMetadata(nvImage: NVImage): ImageMetadataType {
if (!nvImage.hdr) {
throw new Error('hdr undefined')
}
const id = nvImage.id
const datatypeCode = nvImage.hdr.datatypeCode
const dims = nvImage.hdr.dims
const nx = dims[1]
const ny = dims[2]
const nz = dims[3]
const nt = Math.max(1, dims[4])
const pixDims = nvImage.hdr.pixDims
const dx = pixDims[1]
const dy = pixDims[2]
const dz = pixDims[3]
const dt = pixDims[4]
const bpv = Math.floor(nvImage.hdr.numBitsPerVoxel / 8)
return { id, datatypeCode, nx, ny, nz, nt, dx, dy, dz, dt, bpv }
}
/**
* Get current image options
*
* @param nvImage - The NVImage instance
* @returns Object containing current image options
*/
export function getImageOptions(nvImage: NVImage): ImageFromUrlOptions {
const options = NVImageFromUrlOptions(
'', // url,
'', // urlImageData
nvImage.name, // name
nvImage._colormap, // colormap
nvImage.opacity, // opacity
nvImage.cal_min, // cal_min
nvImage.cal_max, // cal_max
nvImage.trustCalMinMax, // trustCalMinMax,
nvImage.percentileFrac, // percentileFrac
nvImage.ignoreZeroVoxels, // ignoreZeroVoxels
nvImage.useQFormNotSForm, // useQFormNotSForm
nvImage.colormapNegative, // colormapNegative
nvImage.frame4D,
nvImage.imageType, // imageType
nvImage.cal_minNeg, // cal_minNeg
nvImage.cal_maxNeg, // cal_maxNeg
nvImage.colorbarVisible // colorbarVisible
)
return options
}
/**
* Update image options
*
* @param nvImage - The NVImage instance
* @param options - New options to apply to the image
*/
export function applyOptionsUpdate(nvImage: NVImage, options: ImageFromUrlOptions): void {
nvImage.hdr!.cal_min = options.cal_min!
nvImage.hdr!.cal_max = options.cal_max!
Object.assign(nvImage, options)
}