C# 将raw图转成Dicom

网上找起来非常费劲,想着为后人留点东西,就写这篇来试一下。

        public void LoadImageFromDisk()
        {
            try
            {
                Nanocare.BussinessLogic.Views views = new Nanocare.BussinessLogic.Views();
                List<ViewImageAll> view_all_list = views.GetAllViewImages(tempCase_id);
                ViewImageAll view_image_all = view_all_list[0];
                int nImage = (int)view_image_all.nImage;
                byte[] LoadImageFromDiskFrameBuf = new byte[1024 * 1024 * nImage];
                byte[] SingleFrameBuf = new byte[1024 * 1024 * 2 ];
                ViewImage vew_img = new ViewImage();
                RasterCodecs codecs = new RasterCodecs();
                byte[] _ViewImageBuffer = vew_img.LoadRawImage(CurrentRawImagePath);  //读取图片至缓存
                Array.Copy(_ViewImageBuffer, RAW_HEAD_LEN, SingleFrameBuf, 0, SingleFrameBuf.Length);
                byte[] frame_buf_enhance0 = ViewImage.Enhance16b(1, SingleFrameBuf);
                MemoryByteBuffer buffer = new MemoryByteBuffer(frame_buf_enhance0);
                DicomDataset dataset = new DicomDataset();
                dataset.Add(FellowOakDicom.DicomTag.SpecificCharacterSet, "GB18030");
                dataset.Add(FellowOakDicom.DicomTag.PatientID, CurrentUser.PatientID.ToString());
                dataset.Add(FellowOakDicom.DicomTag.StudyID, view_image_all.case_id.ToString());
                dataset.Add(FellowOakDicom.DicomTag.PatientName, view_image_all.patient_name);
                dataset.Add(FellowOakDicom.DicomTag.BitsAllocated, (ushort)16);
                dataset.Add(FellowOakDicom.DicomTag.SOPClassUID, "1.2.840.10008.5.1.4.1.1.2");
                dataset.Add(FellowOakDicom.DicomTag.SOPInstanceUID, "1.2.840.10008.5.1.4.1.1.2.");
                //dataset.Add(FellowOakDicom.DicomTag.PatientBirthDate, view_image_all.patent_dob.ToString());
                //dataset.Add(FellowOakDicom.DicomTag.PatientSex, view_image_all.patient_gender);
                //dataset.Add(FellowOakDicom.DicomTag.StudyDate, view_image_all.ViewCreateDate.ToString());
                dataset.Add(FellowOakDicom.DicomTag.StudyDescription, view_image_all.anatomyTitleC + ((double)view_image_all.doseDR).ToString("0.0") + "DR" + ((double)view_image_all.doseCD).ToString("0.0") + "CD" + ((double)view_image_all.doseDAP).ToString("0.0") + "DAP");
                dataset.Add(FellowOakDicom.DicomTag.SeriesDescription, view_image_all.viewTitleC.ToString()+ view_image_all.imageKv+"KV"+ view_image_all.imageMA+"MA"+ view_image_all.imageMS+"MS");
                dataset.Add(FellowOakDicom.DicomTag.SeriesNumber, view_image_all.view_id.ToString());
                dataset.Add(FellowOakDicom.DicomTag.Columns, "1024");
                dataset.Add(FellowOakDicom.DicomTag.Rows, "1024");
                DicomPixelData pixelData = DicomPixelData.Create(dataset, true);
                pixelData.BitsStored = 16;
                pixelData.SamplesPerPixel = 1;
                pixelData.HighBit = 15;
                pixelData.PixelRepresentation = 0;
                pixelData.PlanarConfiguration = 0;
                pixelData.AddFrame(buffer);
                for (int img_index = 1; (RAW_HEAD_LEN + (img_index) * (1024 * 1024 * 2 + RAW_HEAD_LEN)) < _ViewImageBuffer.Length; img_index++)
                {
                    Array.Copy(_ViewImageBuffer, RAW_HEAD_LEN + img_index * (1024 * 1024 * 2 + RAW_HEAD_LEN), SingleFrameBuf, 0, SingleFrameBuf.Length);
                    frame_buf_enhance0 = ViewImage.Enhance16b(1, SingleFrameBuf);
                    MemoryByteBuffer addBuffer = new MemoryByteBuffer(frame_buf_enhance0);
                    pixelData.AddFrame(addBuffer);
                }
                DicomFile dicomfile = new DicomFile(dataset);
                dicomfile.Save(CurrentDicomImagePath);
            }
            catch (Exception ex)
            {
                Nanocare.Views.Messager.ShowError(this, ex);
            }

        }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值