internal VolumeSliceRangeCollector(VolumeMetadata metaData, Direction direction, IReadOnlyCollection <VolumeSliceRangeDefinition> ranges, IProgress <VolumeSliceDefinition> progressNotifier = null, CancellationToken ct = default(CancellationToken)) { if (direction != Direction.Z && ranges.Any(r => r.Direction != direction)) { throw new ArgumentException("Collecting slices ranges for different directions than input is only allowed for z-directed input"); } _Direction = direction; _ProgressNotifier = progressNotifier; _Ct = ct; _X = metaData.SizeX; _Y = metaData.SizeY; _Z = metaData.SizeZ; foreach (var range in ranges) { var set = GetSlices(range.Direction); for (var i = range.First; i <= range.Last; i++) { metaData.GetSliceSize(range.Direction, out var x, out var y); set[i] = new byte[x * y]; } } Interop = new InteropSliceWriter { WriteSlice = WriteSlice }; }
internal FullVolumeWriter(VolumeMetadata metadata, Direction direction, IProgress <ushort> progressNotifier = null, CancellationToken ct = default(CancellationToken)) { if (metadata == null) { throw new ArgumentNullException(nameof(metadata)); } _ProgressNotifier = progressNotifier; _Ct = ct; metadata.GetSliceSize(direction, out _SizeX, out _SizeY); _SizeZ = metadata.GetSize(direction); _Data = new byte[_SizeZ][]; for (var z = 0; z < _SizeZ; z++) { _Data[z] = new byte[_SizeX * _SizeY]; } Interop = new InteropSliceWriter { WriteSlice = WriteSlice }; }