예제 #1
0
        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);
        }
예제 #2
0
        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;
            }
        }
예제 #3
0
        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;
             *     }*/
        }
예제 #4
0
        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);
            }
        }