写入数据
1,
public static DicomOverlayData Overlay(DicomDataset ds)
{
ushort group = 0x6000;
while (ds.Contains(new DicomTag(group, DicomTag.OverlayBitPosition.Element))) group += 2;
var dsImage = new DicomImage(ds, 0);
var overlay = new DicomOverlayData(ds, group)
{
Type = DicomOverlayType.ROI,
Rows = dsImage.Height,
Columns = dsImage.Width,
OriginX = 1,
OriginY = 1,
BitsAllocated = 1,
BitPosition = 1
};
return overlay;
}
2,新建容器
OverlayDataList = new BitList { Capacity = overlay.Rows * overlay.Columns };
Overlay(newDataset);
OverlayData.Data = EvenLengthBuffer.Create(new MemoryByteBuffer(OverlayDataList.Array));
DicomDataset dataset = new DicomDataset();
DicomFile ctFile = new DicomFile(newDataset);
ctFile.Dataset.AddOrUpdate(DicomTag.OverlayData, OverlayData.Data);
解析overlay层数据
var dcmFile = DicomFile.Open(@filename);
var dataset = dcmFile.Dataset;
IPixelData pixelData = PixelDataFactory.Create(DicomPixelData.Create(dataset), 0);
int height = dataset.GetSingleValue<int>(DicomTag.Rows);
int width = dataset.GetSingleValue<int>(DicomTag.Columns);
Bitmap bitmap = new Bitmap(width, height);
var overlays = DicomOverlayData.FromDataset(dataset);
var overlayDatabety = _overlays[0].Data.Data;
for (int i = 0; i < overlayDatabety.Length; i++)
{
for (int k = 0; k < 8; k++)
{
int b = ((overlayDatabety[i] >> k) & 0x1);
int value = 0;
if (b > 0)
{
value = 0;
}
else
{
value = 255;
}
int rowIndwx = ((i * 8) + k) / overlays[0].Columns;
int colIndwx = ((i * 8) + k) % overlays[0].Columns;
bitmap.SetPixel(colIndwx, rowIndwx, Color.FromArgb(value, value, value));
}
}
var newfilename = Path.ChangeExtension(new_Markfullname, ".bmp");
bitmap.Save(newfilename, System.Drawing.Imaging.ImageFormat.Bmp);//测试代码
return bitmap;