网上找起来非常费劲,想着为后人留点东西,就写这篇来试一下。
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);
}
}