Ejemplo n.º 1
0
        internal PreviewCreator(VolumeMetadata metadata, ushort minification, IProgress <VolumeSliceDefinition> progress = null, CancellationToken ct = default(CancellationToken))
        {
            _Metadata     = metadata ?? throw new ArgumentNullException(nameof(metadata));
            _Minification = minification;
            _Progress     = progress;
            _Ct           = ct;

            _PreviewSizeX = ( ushort )((metadata.SizeX - 1) / minification + 1);
            _PreviewSizeY = ( ushort )((metadata.SizeY - 1) / minification + 1);
            _PreviewSizeZ = ( ushort )((metadata.SizeZ - 1) / minification + 1);

            if (_PreviewSizeX < 2 || _PreviewSizeY < 2 || _PreviewSizeZ < 2)
            {
                throw new ArgumentOutOfRangeException(nameof(minification));
            }

            _PreviewData = new byte[_PreviewSizeZ][];
            long sliceSize = _PreviewSizeX * _PreviewSizeY;

            for (var z = 0; z < _PreviewSizeZ; z++)
            {
                _PreviewData[z] = new byte[sliceSize];
            }

            Interop = new InteropSliceWriter
            {
                WriteSlice = WriteSlice
            };
        }
        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
            };
        }
Ejemplo n.º 3
0
        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
            };
        }
Ejemplo n.º 4
0
 internal static extern int DecompressSlices(InteropStream inputStream, InteropSliceWriter outputStream, ushort index, ushort count);
Ejemplo n.º 5
0
 internal static extern int DecompressVolume(InteropStream inputStream, InteropSliceWriter outputStream);