import { type VolumeDims } from "./VolumeDims.js"; import { Vector3, Vector2 } from "three"; export type ImageInfo = Readonly<{ name: string; /** * XY dimensions of the texture atlas used by `RayMarchedAtlasVolume` and `Atlas2DSlice`, in number of z-slice * tiles (not pixels). Chosen by the loader to lay out the 3D volume in the squarest possible 2D texture atlas. */ atlasTileDims: [number, number]; /** Size of the currently loaded subregion, in pixels, in XYZ order */ subregionSize: [number, number, number]; /** Offset of the loaded subregion into the total volume, in pixels, in XYZ order */ subregionOffset: [number, number, number]; /** Number of channels in the image, accounting for convergence of multiple sources. * Because of multiple sources, which is not accounted for in ImageInfo, * that this could be different than the number of channels in the multiscaleLevelDims. * NOTE Currently there is one ImageInfo per Volume, not per source. */ combinedNumChannels: number; /** The names of each channel */ channelNames: string[]; /** Optional overrides to default channel colors, in 0-255 range, RGB order */ channelColors?: [number, number, number][]; /** Dimensions of each scale level, at original size, from the first data source */ multiscaleLevelDims: VolumeDims[]; /** The scale level from which this image was loaded, between `0` and `numMultiscaleLevels-1` */ multiscaleLevel: number; /** * An *optional* transform which may be supplied by image metadata. It is *not* applied by * default, but may be read and fed to `View3d` methods: `setVolumeTransform`, * `setVolumeRotation`, `setVolumeScale`. */ transform: { /** Translation of the volume from the center of space, in volume voxels in XYZ order */ translation: [number, number, number]; /** Rotation of the volume in Euler angles, applied in XYZ order */ rotation: [number, number, number]; /** Scale of the volume relative to its size as derived from `multiscaleLevelDims`, in XYZ order */ scale: [number, number, number]; }; /** Arbitrary additional metadata not captured by other `ImageInfo` properties */ userData?: Record; }>; export declare function defaultImageInfo(): ImageInfo; export declare class CImageInfo { imageInfo: ImageInfo; constructor(imageInfo?: ImageInfo); get currentLevelDims(): VolumeDims; /** Number of channels in the image */ get numChannels(): number; /** XYZ size of the *original* (not downsampled) volume, in pixels */ get originalSize(): Vector3; /** Size of the volume, in pixels */ get volumeSize(): Vector3; /** Size of a single *original* (not downsampled) pixel, in spatial units */ get physicalPixelSize(): Vector3; /** Symbol of physical spatial unit used by `physicalPixelSize` */ get spatialUnit(): string; /** Number of timesteps in the time series, or 1 if the image is not a time series */ get times(): number; /** Size of each timestep in temporal units */ get timeScale(): number; /** Symbol of physical time unit used by `timeScale` */ get timeUnit(): string; /** Number of scale levels available for this volume */ get numMultiscaleLevels(): number; /** The names of each channel */ get channelNames(): string[]; /** Optional overrides to default channel colors, in 0-255 range */ get channelColors(): [number, number, number][] | undefined; /** Size of the currently loaded subregion, in pixels */ get subregionSize(): Vector3; /** Offset of the loaded subregion into the total volume, in pixels */ get subregionOffset(): Vector3; get multiscaleLevel(): number; /** * XY dimensions of the texture atlas used by `RayMarchedAtlasVolume` and `Atlas2DSlice`, in number of z-slice * tiles (not pixels). Chosen by the loader to lay out the 3D volume in the squarest possible 2D texture atlas. */ get atlasTileDims(): Vector2; get transform(): { translation: Vector3; rotation: Vector3; scale: Vector3; }; } export declare function computeAtlasSize(imageInfo: ImageInfo): [number, number];