private void VerifyTranscodeFrame(TranscoderTestData testData, DicomFile inputFile) { Stream result = _transcoder.TranscodeFrame(inputFile, 0, testData.MetaData.OutputSyntaxUid); string hashcode = GetByteArrayHashCode(ToByteArray(result)); Assert.Equal(testData.MetaData.Frame0HashCode, hashcode); }
public async Task <IReadOnlyCollection <Stream> > GetFramesResourceAsync(Stream stream, IEnumerable <int> frames, bool originalTransferSyntaxRequested, string requestedRepresentation) { EnsureArg.IsNotNull(stream, nameof(stream)); EnsureArg.IsNotNull(frames, nameof(frames)); DicomFile dicomFile = await DicomFile.OpenAsync(stream); // Validate requested frame index exists in file and retrieve the pixel data associated with the file. DicomPixelData pixelData = dicomFile.GetPixelDataAndValidateFrames(frames); if (!originalTransferSyntaxRequested && !dicomFile.Dataset.InternalTransferSyntax.Equals(DicomTransferSyntax.Parse(requestedRepresentation))) { return(frames.Select(frame => new LazyTransformReadOnlyStream <DicomFile>( dicomFile, df => _transcoder.TranscodeFrame(df, frame, requestedRepresentation))) .ToArray()); } else { return(frames.Select( frame => new LazyTransformReadOnlyStream <DicomFile>( dicomFile, df => GetFrameAsDicomData(pixelData, frame))) .ToArray()); } }
public void GivenSupported16bitTransferSyntax_WhenRetrievingFrameAndAskingForConversion_ReturnedFileHasExpectedTransferSyntax( DicomTransferSyntax tsFrom, DicomTransferSyntax tsTo, PhotometricInterpretation photometricInterpretation) { DicomFile dicomFile = StreamAndStoredFileFromDataset(photometricInterpretation, false, tsFrom).Result.dicomFile; dicomFile.Dataset.ToInstanceIdentifier(); _transcoder.TranscodeFrame(dicomFile, 1, tsTo.UID.UID); }
public async Task GivenDicomFileWithFrames_WhenRetrievingWithTransferSyntax_ThenTranscoderShouldBeInvokedAsExpected(bool originalTransferSyntaxRequested, string requestedRepresentation, bool shouldBeInvoked) { (DicomFile file, Stream stream) = StreamAndStoredFileFromDataset(GenerateDatasetsFromIdentifiers(), 1).Result; ITranscoder transcoder = Substitute.For <ITranscoder>(); transcoder.TranscodeFrame(Arg.Any <DicomFile>(), Arg.Any <int>(), Arg.Any <string>()).Returns(_recyclableMemoryStreamManager.GetStream()); FrameHandler frameHandler = new FrameHandler(transcoder, _recyclableMemoryStreamManager); IReadOnlyCollection <Stream> result = await frameHandler.GetFramesResourceAsync(stream, new int[] { 0 }, originalTransferSyntaxRequested, requestedRepresentation); // Call Position of LazyTransformReadOnlyStream so that transcoder.TranscodeFrame is invoked long pos = result.First().Position; if (shouldBeInvoked) { transcoder.Received().TranscodeFrame(Arg.Any <DicomFile>(), Arg.Any <int>(), Arg.Any <string>()); } else { transcoder.DidNotReceive().TranscodeFrame(Arg.Any <DicomFile>(), Arg.Any <int>(), Arg.Any <string>()); } }