private void frmImage_Load(object sender, EventArgs e) { //读取相关数据元素的值,并设置窗体、窗宽、窗位 this.Width = items[DicomTags.Columns].ReadValue <ushort>()[0]; this.Height = items[DicomTags.Rows].ReadValue <ushort>()[0]; tsWindow.Text = items[DicomTags.WindowWidth].ReadValue <string>()[0]; tsLevel.Text = items[DicomTags.WindowCenter].ReadValue <string>()[0]; //获取图像像素IOM各数据元素的值 ushort bs = items[DicomTags.BitsStored].ReadValue <ushort>()[0]; ushort hb = items[DicomTags.HighBit].ReadValue <ushort>()[0]; if (items[DicomTags.BitsAllocated].ReadValue <ushort>()[0] == 16) //OW { OW ow = new OW(items[DicomTags.PixelData].vrparser.syntax); items[DicomTags.PixelData].vrparser = ow; owpixels = items[DicomTags.PixelData].ReadValue <short>(); for (int i = 0; i < owpixels.Length; i++) { //BitsAllocated右位移至最低位 owpixels[i] = (short)(owpixels[i] >> (hb - (bs - 1))); //逐像素单元转换处理得到像素值,放入owpixels } } else { OB ob = new OB(items[DicomTags.PixelData].vrparser.syntax); items[DicomTags.PixelData].vrparser = ob; obpixels = items[DicomTags.PixelData].ReadValue <byte>(); for (int i = 0; i < obpixels.Length; i++) { //BitsAllocated右位移至最低位 obpixels[i] = (byte)(obpixels[i] >> (hb - (bs - 1))); //逐像素单元转换处理得到像素值,放入obpixels } } }
public VR GetVR(string key) { //如果对象存在,则直接从享元池获取 if (VRs.ContainsKey(key)) { return((VR)VRs[key]); } //如果对象不存在,先创建一个新的对象添加到享元池中,然后返回 else { VR fw = null; switch (key) { case "SS": fw = new SS(isBE, false); break; case "US": fw = new US(isBE); break; case "SL": fw = new SL(isBE, false); break; case "UL": fw = new UL(isBE, false); break; case "FL": fw = new FL(isBE, false); break; case "FD": fw = new FD(isBE, false); break; case "DA": fw = new DA(isBE, false); break; case "TM": fw = new TM(isBE, false); break; case "DT": fw = new DT(isBE, false); break; case "AS": fw = new AS(isBE, false); break; case "OB": fw = new OB(isBE); break; case "OF": fw = new OF(isBE, true); break; case "OW": fw = new OW(isBE); break; case "SQ": fw = new SQ(isBE, true); break; case "LO": fw = new LO(isBE, true); break; case "UI": fw = new UI(isBE, true); break; case "SH": fw = new SH(isBE, true); break; case "AE": fw = new AE(isBE, true); break; case "CS": fw = new CS(isBE, true); break; case "PN": fw = new PN(isBE, true); break; case "DS": fw = new DS(isBE); break; case "IS": fw = new IS(isBE, true); break; //default for text //default: fw = new ST(isBE, false); break; } VRs.Add(key, fw); return(fw); } }
public void Stop() { OWThread.Abort(); OW.Abort(); }