首页 > 编程语言 >C# jpg格式转dicom格式

C# jpg格式转dicom格式

时间:2024-07-08 16:19:37浏览次数:14  
标签:bitmapData string C# image ushort jpg new 格式 DicomTag

安装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;
 }

 

标签:bitmapData,string,C#,image,ushort,jpg,new,格式,DicomTag
From: https://www.cnblogs.com/zengbingqian/p/18290146

相关文章

  • SciTech-POLIR-Statistics-重要的统计数据来源 与 数据建模
    重要数据来源:官员与人口分布建模:9000万“党员”方可称为“人民”,因为党员才有“参政议政”资格;其他13亿多“群众”大多数是“经营、生产与劳动”,无法(或只有极少数)“参政议政”被“代表”.对于“政事”,只在“人民”(党员)的组织内决策、分级授权与分发及公布?因为全......
  • go 使用websocket
    packagechatimport( "encoding/json" "github.com/gorilla/websocket" "github.com/zeromicro/go-zero/core/logx" "log" "net/http" "sync")typeClientstruct{ conn*websocket.Conn......
  • 海外短剧系统CPS平台源码搭建 ,海量正版短剧推广分佣
    海外短剧cps推广分佣系统,短剧平台的分销推广功能,这个功能它到底有啥优点呢?做海外短剧怕不懂海外市场、怕海外做不出流量、怕入不敷出,海外运营推广困难等等。综合上述问题总结出了一点,就是流量问题,海外短剧推广都会用tiktok、facebook、Twitter、去推广,这个无可厚非,目前海外短......
  • AIGC:重塑创意产业的“未来”力量
    在2024年世界人工智能大会(WAIC)的璀璨舞台上,AI生成内容(AIGC)无疑成为了最耀眼的明星。从快手宣布即将上线的首部无演员、全AI生成的奇幻短剧《山海奇镜之劈波斩浪》,到“AIGC+”如何深度链接千行百业的圆桌论坛,再到出门问问现场展示的AIGC产品矩阵,无不昭示着这一技术正以前所未有......
  • 使用F1C200S从零制作掌机之构建debian文件系统
    前情:使用buildrootfs构建的文件系统调试了很久NES模拟器,执行InfoNES模拟器的时候一直黑屏,无内容显示,调不通了,所以改用debian系统试试。一、环境配置首先下载两个工具:qemu-arm-static和debootstrap。qemu-arm-static:通过qemu-arm-static,我们在x86的UbuntuPC机上,可以模拟A......
  • [UVM]IC验证自动结束仿真函数——uvm_top.set_timeout/set_report_max_quit_count
    Title:[UVM]IC验证自动结束仿真函数——uvm_top.set_timeout/set_report_max_quit_count文章目录1-前言2-uvm_top.set_timeout3-set_report_max_quit_count4-运用5-小结1-前言​数字IC验证过程中,需要运行不同Testcase,有些TC会因为TC配置、TB机制等原因,导致m......
  • 白帽工具箱:DVWA中CSRF攻击与防御的入门指南
    ......
  • SQL Server 实现类似CountIF的函数
    需求说明:我有一个客户表,还有一个客户的体验记录表,我需要汇总客户体验信息如下:客户名称,本周体验次数,本月体验次数,本年度体验次数,累计体验次数,首次体验时间,最近体验时间 信息,如何用一个SQL语句搞定:COUNT函数官方说明:指定COUNT返回唯一非Null值的数量。所以变相实现如下:S......
  • c#表单
    usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Threading;namespace表单{publicpartialclassForm1:......
  • Elasticsearch:Node.js ECS 日志记录 - Pino
    在我的上一篇文章“Beats:使用Filebeat从Python应用程序中提取日志”里,我详述了如何使用Python来生成日志,并使用Filebeat来收集日志到Elasticsearch中。在今天的文章中,我来详细描述如何使用Node.js来生成ECS相兼容的日子。ECS相兼容的日志符合易于Elasticsear......