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; } }
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; * }*/ }
public void readDicom(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; //imagePanelControl.NewImage = true; // Text = "DICOM Image Viewer: " + fileNameOnly; pixels16.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; } fp.Signed16Image = dd.signedImage; fp.SetParameters(ref pixels16, imageWidth, imageHeight, winWidth, winCentre, true); } }