private void ReadAndDisplayDicomFile(string fileName, string fileNameOnly) { dd.DicomFileName = fileName; TypeOfDicomFile typeOfDicomFile = dd.typeofDicomFile; if (typeOfDicomFile == TypeOfDicomFile.Dicom3File || typeOfDicomFile == TypeOfDicomFile.DicomOldTypeFile) { imageWidth = dd.width; imageHeight = dd.height; bitDepth = dd.bitsAllocated; winCentre = dd.windowCentre; winWidth = dd.windowWidth; samplesPerPixel = dd.samplesPerPixel; signedImage = dd.signedImage; label1.Visible = true; label2.Visible = true; label3.Visible = true; label4.Visible = true; bnSave.Enabled = true; bnTags.Enabled = true; bnResetWL.Enabled = true; label2.Text = imageWidth.ToString() + " X " + imageHeight.ToString(); if (samplesPerPixel == 1) { label4.Text = bitDepth.ToString() + " bit"; } else { label4.Text = bitDepth.ToString() + " bit, " + samplesPerPixel + " samples per pixel"; } imagePanelControl.NewImage = true; Text = "DICOM Image Viewer: " + fileNameOnly; if (samplesPerPixel == 1 && bitDepth == 8) { pixels8.Clear(); pixels16.Clear(); pixels24.Clear(); dd.GetPixels8(ref pixels8); // This is primarily for debugging purposes, // to view the pixel values as ascii data. //if (true) //{ // System.IO.StreamWriter file = new System.IO.StreamWriter( // "C:\\imageSigned.txt"); // for (int ik = 0; ik < pixels8.Count; ++ik) // file.Write(pixels8[ik] + " "); // file.Close(); //} minPixelValue = pixels8.Min(); maxPixelValue = pixels8.Max(); // Bug fix dated 24 Aug 2013 - for proper window/level of signed images // Thanks to Matias Montroull from Argentina for pointing this out. if (dd.signedImage) { winCentre -= char.MinValue; } if (Math.Abs(winWidth) < 0.001) { winWidth = maxPixelValue - minPixelValue; } if ((winCentre == 0) || (minPixelValue > winCentre) || (maxPixelValue < winCentre)) { winCentre = (maxPixelValue + minPixelValue) / 2; } imagePanelControl.SetParameters(ref pixels8, imageWidth, imageHeight, winWidth, winCentre, samplesPerPixel, true, this); } if (samplesPerPixel == 1 && bitDepth == 16) { pixels16.Clear(); pixels8.Clear(); pixels24.Clear(); dd.GetPixels16(ref pixels16); // This is primarily for debugging purposes, // to view the pixel values as ascii data. //if (true) //{ // System.IO.StreamWriter file = new System.IO.StreamWriter( // "C:\\imageSigned.txt"); // for (int ik = 0; ik < pixels16.Count; ++ik) // file.Write(pixels16[ik] + " "); // file.Close(); //} minPixelValue = pixels16.Min(); maxPixelValue = pixels16.Max(); // Bug fix dated 24 Aug 2013 - for proper window/level of signed images // Thanks to Matias Montroull from Argentina for pointing this out. if (dd.signedImage) { winCentre -= short.MinValue; } if (Math.Abs(winWidth) < 0.001) { winWidth = maxPixelValue - minPixelValue; } if ((winCentre == 0) || (minPixelValue > winCentre) || (maxPixelValue < winCentre)) { winCentre = (maxPixelValue + minPixelValue) / 2; } imagePanelControl.Signed16Image = dd.signedImage; imagePanelControl.SetParameters(ref pixels16, imageWidth, imageHeight, winWidth, winCentre, true, this); } if (samplesPerPixel == 3 && bitDepth == 8) { // This is an RGB colour image pixels8.Clear(); pixels16.Clear(); pixels24.Clear(); dd.GetPixels24(ref pixels24); // This code segment is primarily for debugging purposes, // to view the pixel values as ascii data. //if (true) //{ // System.IO.StreamWriter file = new System.IO.StreamWriter( // "C:\\image24.txt"); // for (int ik = 0; ik < pixels24.Count; ++ik) // file.Write(pixels24[ik] + " "); // file.Close(); //} imagePanelControl.SetParameters(ref pixels24, imageWidth, imageHeight, winWidth, winCentre, samplesPerPixel, true, this); } } else { if (typeOfDicomFile == TypeOfDicomFile.DicomUnknownTransferSyntax) { MessageBox.Show("Sorry, I can't read a DICOM file with this Transfer Syntax.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { MessageBox.Show("Sorry, I can't open this file. " + "This file does not appear to contain a DICOM image.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } Text = "DICOM Image Viewer: "; // Show a plain grayscale image instead pixels8.Clear(); pixels16.Clear(); pixels24.Clear(); samplesPerPixel = 1; imageWidth = imagePanelControl.Width - 25; // 25 is a magic number imageHeight = imagePanelControl.Height - 25; // Same magic number int iNoPix = imageWidth * imageHeight; for (int i = 0; i < iNoPix; ++i) { pixels8.Add(240);// 240 is the grayvalue corresponding to the Control colour } winWidth = 256; winCentre = 127; imagePanelControl.SetParameters(ref pixels8, imageWidth, imageHeight, winWidth, winCentre, samplesPerPixel, true, this); imagePanelControl.Invalidate(); label1.Visible = false; label2.Visible = false; label3.Visible = false; label4.Visible = false; bnSave.Enabled = false; bnTags.Enabled = false; bnResetWL.Enabled = false; } }
private void ReadAndDisplayDicomFile(string fileName, string fileNameOnly) { dd.DicomFileName = fileName; TypeOfDicomFile typeOfDicomFile = dd.typeofDicomFile; if (typeOfDicomFile == TypeOfDicomFile.Dicom3File || typeOfDicomFile == TypeOfDicomFile.DicomOldTypeFile) { imageWidth = dd.width; imageHeight = dd.height; bitDepth = dd.bitsAllocated; winCentre = dd.windowCentre; winWidth = dd.windowWidth; samplesPerPixel = dd.samplesPerPixel; signedImage = dd.signedImage; bnTags.Enabled = true; imagePanelControl.NewImage = true; Text = "DICOM Image Viewer: " + fileNameOnly; if (samplesPerPixel == 1 && bitDepth == 8) { pixels8.Clear(); pixels16.Clear(); pixels24.Clear(); dd.GetPixels8(ref pixels8); minPixelValue = pixels8.Min(); maxPixelValue = pixels8.Max(); if (dd.signedImage) { winCentre -= char.MinValue; } if (Math.Abs(winWidth) < 0.001) { winWidth = maxPixelValue - minPixelValue; } if ((winCentre == 0) || (minPixelValue > winCentre) || (maxPixelValue < winCentre)) { winCentre = (maxPixelValue + minPixelValue) / 2; } imagePanelControl.SetParameters(ref pixels8, imageWidth, imageHeight, winWidth, winCentre, samplesPerPixel, true, this); } if (samplesPerPixel == 1 && bitDepth == 16) { pixels16.Clear(); pixels8.Clear(); pixels24.Clear(); dd.GetPixels16(ref pixels16); minPixelValue = pixels16.Min(); maxPixelValue = pixels16.Max(); if (dd.signedImage) { winCentre -= short.MinValue; } if (Math.Abs(winWidth) < 0.001) { winWidth = maxPixelValue - minPixelValue; } if ((winCentre == 0) || (minPixelValue > winCentre) || (maxPixelValue < winCentre)) { winCentre = (maxPixelValue + minPixelValue) / 2; } imagePanelControl.Signed16Image = dd.signedImage; imagePanelControl.SetParameters(ref pixels16, imageWidth, imageHeight, winWidth, winCentre, true, this); } if (samplesPerPixel == 3 && bitDepth == 8) { // This is an RGB colour image pixels8.Clear(); pixels16.Clear(); pixels24.Clear(); dd.GetPixels24(ref pixels24); imagePanelControl.SetParameters(ref pixels24, imageWidth, imageHeight, winWidth, winCentre, samplesPerPixel, true, this); } } else { if (typeOfDicomFile == TypeOfDicomFile.DicomUnknownTransferSyntax) { MessageBox.Show("Xin lỗi, File DiCOM này không thể mở!", "Chú Ý !!!", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { MessageBox.Show("Xin lỗi, File này không tồn tại ảnh", "Chú Ý !!!", MessageBoxButtons.OK, MessageBoxIcon.Error); } Text = "DICOM Image Viewer: "; // Show a plain grayscale image instead pixels8.Clear(); pixels16.Clear(); pixels24.Clear(); samplesPerPixel = 1; imageWidth = imagePanelControl.Width - 25; // 25 is a magic number imageHeight = imagePanelControl.Height - 25; // Same magic number int iNoPix = imageWidth * imageHeight; for (int i = 0; i < iNoPix; ++i) { pixels8.Add(240);// 240 is the grayvalue corresponding to the Control colour } winWidth = 256; winCentre = 127; imagePanelControl.SetParameters(ref pixels8, imageWidth, imageHeight, winWidth, winCentre, samplesPerPixel, true, this); imagePanelControl.Invalidate(); //bnSave.Enabled = false; bnTags.Enabled = false; } List <string> lstString = dd.dicomInfo; SetString(ref lstString); }
private void ReadAndDisplayDicomFile(string fileName, string fileNameOnly) { dd.DicomFileName = fileName; bool result = dd.dicomFileReadSuccess; if (result == true) { imageWidth = dd.width; imageHeight = dd.height; bitDepth = dd.bitsAllocated; winCentre = dd.windowCentre; winWidth = dd.windowWidth; samplesPerPixel = dd.samplesPerPixel; signedImage = dd.signedImage; label1.Visible = true; label2.Visible = true; label3.Visible = true; label4.Visible = true; bnSave.Enabled = true; bnTags.Enabled = true; bnResetWL.Enabled = true; label2.Text = imageWidth.ToString() + " X " + imageHeight.ToString(); if (samplesPerPixel == 1) { label4.Text = bitDepth.ToString() + " bit"; } else { label4.Text = bitDepth.ToString() + " bit, " + samplesPerPixel + " samples per pixel"; } imagePanelControl.NewImage = true; Text = "DICOM Image Viewer: " + fileNameOnly; if (samplesPerPixel == 1 && bitDepth == 8) { pixels8.Clear(); pixels16.Clear(); pixels24.Clear(); dd.GetPixels8(ref pixels8); if (winCentre == 0 && winWidth == 0) { winWidth = 256; winCentre = 128; } imagePanelControl.SetParameters(ref pixels8, imageWidth, imageHeight, winWidth, winCentre, samplesPerPixel, true, this); } if (samplesPerPixel == 1 && bitDepth == 16) { pixels16.Clear(); pixels8.Clear(); pixels24.Clear(); dd.GetPixels16(ref pixels16); // This is primarily for debugging purposes, // to view the pixel values as ascii data. //int ij = 2; //if (ij == 2) //{ // System.IO.StreamWriter file = new System.IO.StreamWriter( // "c:\\Amar\\imageSigned.txt"); // for (int ik = 0; ik < pixels16.Count; ++ik) // file.Write(pixels16[ik] + " "); // file.Close(); //} if (winCentre == 0 && winWidth == 0) { winWidth = 65536; winCentre = 32768; } imagePanelControl.Signed16Image = dd.signedImage; imagePanelControl.SetParameters(ref pixels16, imageWidth, imageHeight, winWidth, winCentre, true, this); } if (samplesPerPixel == 3 && bitDepth == 8) { // This is an RGB colour image pixels8.Clear(); pixels16.Clear(); pixels24.Clear(); dd.GetPixels24(ref pixels24); // This code segment is primarily for debugging purposes, // to view the pixel values as ascii data. //int ij = 2; //if (ij == 2) //{ // System.IO.StreamWriter file = new System.IO.StreamWriter( // "c:\\Amar\\image24.txt"); // for (int ik = 0; ik < pixels24.Count; ++ik) // file.Write(pixels24[ik] + " "); // file.Close(); //} imagePanelControl.SetParameters(ref pixels24, imageWidth, imageHeight, winWidth, winCentre, samplesPerPixel, true, this); } } else { if (dd.dicmFound == false) { MessageBox.Show("This does not seem to be a DICOM 3.0 file. Sorry, I can't open this."); } else if (dd.dicomDir == true) { MessageBox.Show("This seems to be a DICOMDIR file, and does not contain an image."); } else { MessageBox.Show("Sorry, I can't read a DICOM file with this Transfer Syntax\n" + "You may view the initial tags instead."); } // Show a plain grayscale image instead pixels8.Clear(); pixels16.Clear(); pixels24.Clear(); samplesPerPixel = 1; imageWidth = imagePanelControl.Width - 25; // 25 is a magic number imageHeight = imagePanelControl.Height - 25; // Same magic number int iNoPix = imageWidth * imageHeight; for (int i = 0; i < iNoPix; ++i) { pixels8.Add(240);// 240 is the grayvalue corresponding to the Control colour } winWidth = 256; winCentre = 127; imagePanelControl.SetParameters(ref pixels8, imageWidth, imageHeight, winWidth, winCentre, samplesPerPixel, true, this); imagePanelControl.Invalidate(); label1.Visible = false; label2.Visible = false; label3.Visible = false; label4.Visible = false; bnSave.Enabled = false; bnTags.Enabled = false; bnResetWL.Enabled = false; } }