C# jpg格式转dicom格式
安装Nuget包:fo-dicom 5.1.2版本
代码如下:
/// <summary>
/// 转换为Dicom格式
/// </summary>
/// <param name="patId">患者ID</param>
/// <param name="pisId">影像唯一号</param>
/// <param name="textId">访问号</param>
/// <param name="patName">患者姓名</param>
/// <param name="inputImagePath">jpg图像路径</param>
/// <param name="outputDicomPath">dicom输出路径</param>
/// <returns></returns>
public static bool ConvertToDicomImages(string patId,string pisId,string textId,string patName, string inputImagePath, string outputDicomPath)
{
// 读取图像
using (var originalImage = new Bitmap(inputImagePath))
{
// 创建DICOM数据集
var dicomDataset = new DicomDataset
{
{ DicomTag.PatientID, patId },
{ DicomTag.PatientName, patName },
{ DicomTag.StudyInstanceUID, pisId },//StudyUid
{ DicomTag.SeriesInstanceUID, DicomUIDGenerator.GenerateDerivedFromUUID().UID },
{ DicomTag.SOPInstanceUID, DicomUIDGenerator.GenerateDerivedFromUUID().UID },
{ DicomTag.AccessionNumber,textId },//访问号
{ DicomTag.SOPClassUID, DicomUID.SecondaryCaptureImageStorage },
{ DicomTag.PhotometricInterpretation, "RGB" },
{ DicomTag.Rows, (ushort)originalImage.Height },
{ DicomTag.Columns, (ushort)originalImage.Width },
{ DicomTag.SamplesPerPixel, (ushort)3 },
{ DicomTag.BitsAllocated, (ushort)8 },
{ DicomTag.BitsStored, (ushort)8 },
{ DicomTag.HighBit, (ushort)7 }
};
// 创建像素数据
var pixelData = DicomPixelData.Create(dicomDataset, true);
byte[] imageData = GetImageData(originalImage);
pixelData.AddFrame(new MemoryByteBuffer(imageData));
// 创建 DICOM 文件
var dicomFile = new DicomFile(dicomDataset);
// 保存 DICOM 文件
dicomFile.Save(outputDicomPath);
return File.Exists(outputDicomPath);
}
}
private static byte[] GetImageData(Bitmap image)
{
BitmapData bitmapData = image.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
int actualDataWidth = image.Width * 3;
int byteCount = actualDataWidth * image.Height;
byte[] pixels = new byte[byteCount];
IntPtr ptr = bitmapData.Scan0;
for (int y = 0; y < image.Height; y++)
{
System.Runtime.InteropServices.Marshal.Copy(ptr + (y * bitmapData.Stride), pixels, y * actualDataWidth, actualDataWidth);
}
image.UnlockBits(bitmapData);
return pixels;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类