From 7b5b7e4ffa6f6d1cee98ff798d35f303ceb8a8d0 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 25 Dec 2025 16:02:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/UploadDownLoadController.cs | 162 ++++++++++-------- 1 file changed, 91 insertions(+), 71 deletions(-) diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index 01e9244f4..5f459ebce 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -1081,51 +1081,62 @@ namespace IRaCIS.Core.API.Controllers await using var entryStream = entry.Open(); await using var source = await _oSSService.GetStreamFromOSSAsync(instance.Path); - #region 将多帧合并为一帧 - - // 如果你是从 stream 打开 - var dicomFile = await DicomFile.OpenAsync(source); - - // 获取 Pixel Data 标签 - var pixelData = DicomPixelData.Create(dicomFile.Dataset); - - //获取像素是否为封装形式 - var syntax = dicomFile.Dataset.InternalTransferSyntax; - - try + if (instance.IsEncapsulated) { - //对于封装像素的文件做转换 - if (syntax.IsEncapsulated) + #region 将多帧合并为一帧 + + // 如果你是从 stream 打开 + var dicomFile = await DicomFile.OpenAsync(source); + + // 获取 Pixel Data 标签 + var pixelData = DicomPixelData.Create(dicomFile.Dataset); + + //获取像素是否为封装形式 + var syntax = dicomFile.Dataset.InternalTransferSyntax; + + try + { + //对于封装像素的文件做转换 + if (syntax.IsEncapsulated) + { + + // 创建一个新的片段序列 + var newFragments = new DicomOtherByteFragment(DicomTag.PixelData); + // 获取每帧数据并封装为单独的片段 + for (int n = 0; n < pixelData.NumberOfFrames; n++) + { + var frameData = pixelData.GetFrame(n); + newFragments.Fragments.Add(new MemoryByteBuffer(frameData.Data)); + } + + var frag = dicomFile.Dataset.GetDicomItem(DicomTag.PixelData); + + var originOffsetTable = frag?.OffsetTable; + + newFragments.OffsetTable.AddRange(originOffsetTable?.ToArray()); + // 替换原有的片段序列 + dicomFile.Dataset.AddOrUpdate(newFragments); + } + } + catch (Exception ex) { - // 创建一个新的片段序列 - var newFragments = new DicomOtherByteFragment(DicomTag.PixelData); - // 获取每帧数据并封装为单独的片段 - for (int n = 0; n < pixelData.NumberOfFrames; n++) - { - var frameData = pixelData.GetFrame(n); - newFragments.Fragments.Add(new MemoryByteBuffer(frameData.Data)); - } - - var frag = dicomFile.Dataset.GetDicomItem(DicomTag.PixelData); - - var originOffsetTable = frag?.OffsetTable; - - newFragments.OffsetTable.AddRange(originOffsetTable?.ToArray()); - // 替换原有的片段序列 - dicomFile.Dataset.AddOrUpdate(newFragments); + Log.Logger.Warning($"处理多帧合并{instance.Path}失败: {ex.Message}"); } + + #endregion + + await dicomFile.SaveAsync(entryStream); + } - catch (Exception ex) + else { + await source.CopyToAsync(entryStream, 32 * 1024, abortToken); - Log.Logger.Warning($"处理多帧合并{instance.Path}失败: {ex.Message}"); } - #endregion - await dicomFile.SaveAsync(entryStream); - //await source.CopyToAsync(entryStream, 32 * 1024, abortToken); + } catch (Exception ex) { @@ -1973,50 +1984,59 @@ namespace IRaCIS.Core.API.Controllers await using var entryStream = entry.Open(); await using var source = await _oSSService.GetStreamFromOSSAsync(instance.Path); - #region 将多帧合并为一帧 - - // 如果你是从 stream 打开 - var dicomFile = await DicomFile.OpenAsync(source); - - // 获取 Pixel Data 标签 - var pixelData = DicomPixelData.Create(dicomFile.Dataset); - //获取像素是否为封装形式 - var syntax = dicomFile.Dataset.InternalTransferSyntax; - - try + if (instance.IsEncapsulated) { - //对于封装像素的文件做转换 - if (syntax.IsEncapsulated) + + #region 将多帧合并为一帧 + + // 如果你是从 stream 打开 + var dicomFile = await DicomFile.OpenAsync(source); + + // 获取 Pixel Data 标签 + var pixelData = DicomPixelData.Create(dicomFile.Dataset); + //获取像素是否为封装形式 + var syntax = dicomFile.Dataset.InternalTransferSyntax; + + try + { + //对于封装像素的文件做转换 + if (syntax.IsEncapsulated) + { + + // 创建一个新的片段序列 + var newFragments = new DicomOtherByteFragment(DicomTag.PixelData); + // 获取每帧数据并封装为单独的片段 + for (int n = 0; n < pixelData.NumberOfFrames; n++) + { + var frameData = pixelData.GetFrame(n); + newFragments.Fragments.Add(new MemoryByteBuffer(frameData.Data)); + } + + var frag = dicomFile.Dataset.GetDicomItem(DicomTag.PixelData); + + var originOffsetTable = frag?.OffsetTable; + + newFragments.OffsetTable.AddRange(originOffsetTable?.ToArray()); + // 替换原有的片段序列 + dicomFile.Dataset.AddOrUpdate(newFragments); + } + } + catch (Exception ex) { - // 创建一个新的片段序列 - var newFragments = new DicomOtherByteFragment(DicomTag.PixelData); - // 获取每帧数据并封装为单独的片段 - for (int n = 0; n < pixelData.NumberOfFrames; n++) - { - var frameData = pixelData.GetFrame(n); - newFragments.Fragments.Add(new MemoryByteBuffer(frameData.Data)); - } - - var frag = dicomFile.Dataset.GetDicomItem(DicomTag.PixelData); - - var originOffsetTable = frag?.OffsetTable; - - newFragments.OffsetTable.AddRange(originOffsetTable?.ToArray()); - // 替换原有的片段序列 - dicomFile.Dataset.AddOrUpdate(newFragments); + Log.Logger.Warning($"处理多帧合并{instance.Path}失败: {ex.Message}"); } + + #endregion + + await dicomFile.SaveAsync(entryStream); } - catch (Exception ex) + else { - - Log.Logger.Warning($"处理多帧合并{instance.Path}失败: {ex.Message}"); + await source.CopyToAsync(entryStream, 32 * 1024, abortToken); } - #endregion - - await dicomFile.SaveAsync(entryStream); - //await source.CopyToAsync(entryStream, 32 * 1024, abortToken); + // } catch (Exception ex) {