合并多帧不保留偏移表
continuous-integration/drone/push Build is running
Details
continuous-integration/drone/push Build is running
Details
parent
2fb558d388
commit
2969306d1e
|
|
@ -61,8 +61,24 @@ namespace IRaCIS.Core.Application.Service
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using var source = await sourceFactory();
|
await using var source = await sourceFactory();
|
||||||
|
|
||||||
|
// 【关键修复】将 OSS 流缓冲到 MemoryStream
|
||||||
|
using var bufferedStream = new MemoryStream();
|
||||||
|
|
||||||
|
if (source.CanSeek)
|
||||||
|
{
|
||||||
|
source.Position = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 完全复制到内存流
|
||||||
|
await source.CopyToAsync(bufferedStream);
|
||||||
|
bufferedStream.Position = 0; // 重置位置
|
||||||
|
}
|
||||||
|
|
||||||
// 如果你是从 stream 打开
|
// 如果你是从 stream 打开
|
||||||
var dicomFile = await DicomFile.OpenAsync(source);
|
var dicomFile = await DicomFile.OpenAsync(source.CanSeek ? source : bufferedStream);
|
||||||
|
|
||||||
//获取像素是否为封装形式
|
//获取像素是否为封装形式
|
||||||
var syntax = dicomFile.Dataset.InternalTransferSyntax;
|
var syntax = dicomFile.Dataset.InternalTransferSyntax;
|
||||||
|
|
@ -70,11 +86,14 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//对于封装像素的文件做转换
|
//对于封装像素的文件做转换
|
||||||
if (syntax.IsEncapsulated)
|
if (syntax.IsEncapsulated)
|
||||||
{
|
{
|
||||||
|
#region 开始方式
|
||||||
|
|
||||||
// 获取 Pixel Data 标签
|
// 获取 Pixel Data 标签
|
||||||
var pixelData = DicomPixelData.Create(dicomFile.Dataset);
|
var pixelData = DicomPixelData.Create(dicomFile.Dataset);
|
||||||
|
|
||||||
// 创建一个新的片段序列
|
// 创建一个新的片段序列
|
||||||
var newFragments = new DicomOtherByteFragment(DicomTag.PixelData);
|
var newFragments = new DicomOtherByteFragment(DicomTag.PixelData);
|
||||||
|
|
||||||
// 获取每帧数据并封装为单独的片段
|
// 获取每帧数据并封装为单独的片段
|
||||||
for (int n = 0; n < pixelData.NumberOfFrames; n++)
|
for (int n = 0; n < pixelData.NumberOfFrames; n++)
|
||||||
{
|
{
|
||||||
|
|
@ -82,13 +101,11 @@ namespace IRaCIS.Core.Application.Service
|
||||||
newFragments.Fragments.Add(new MemoryByteBuffer(frameData.Data));
|
newFragments.Fragments.Add(new MemoryByteBuffer(frameData.Data));
|
||||||
}
|
}
|
||||||
|
|
||||||
var frag = dicomFile.Dataset.GetDicomItem<DicomOtherByteFragment>(DicomTag.PixelData);
|
|
||||||
|
|
||||||
var originOffsetTable = frag?.OffsetTable;
|
|
||||||
|
|
||||||
newFragments.OffsetTable.AddRange(originOffsetTable?.ToArray());
|
|
||||||
// 替换原有的片段序列
|
// 替换原有的片段序列
|
||||||
dicomFile.Dataset.AddOrUpdate(newFragments);
|
dicomFile.Dataset.AddOrUpdate(newFragments);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await dicomFile.SaveAsync(output);
|
await dicomFile.SaveAsync(output);
|
||||||
|
|
|
||||||
|
|
@ -104,11 +104,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
newFragments.Fragments.Add(new MemoryByteBuffer(frameData.Data));
|
newFragments.Fragments.Add(new MemoryByteBuffer(frameData.Data));
|
||||||
}
|
}
|
||||||
|
|
||||||
var frag = dicomFile.Dataset.GetDicomItem<DicomOtherByteFragment>(DicomTag.PixelData);
|
//var frag = dicomFile.Dataset.GetDicomItem<DicomOtherByteFragment>(DicomTag.PixelData);
|
||||||
|
|
||||||
var originOffsetTable = frag?.OffsetTable;
|
//var originOffsetTable = frag?.OffsetTable;
|
||||||
|
|
||||||
newFragments.OffsetTable.AddRange(originOffsetTable?.ToArray());
|
//newFragments.OffsetTable.AddRange(originOffsetTable?.ToArray());
|
||||||
// 替换原有的片段序列
|
// 替换原有的片段序列
|
||||||
dicomFile.Dataset.AddOrUpdate(newFragments);
|
dicomFile.Dataset.AddOrUpdate(newFragments);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue