// TODO CR (Mar 2013): Rewrite in a way that isn't so dependent on replacing characters then doing a parse of sorts, especially when the strings are hardcoded
        public static FilmSize FromDicomString(string dicomString)
        {
            try
            {
                if (string.IsNullOrEmpty(dicomString))
                {
                    return(null);
                }

                if (dicomString == "A3")
                {
                    return new FilmSize
                           {
                               _dicomString = dicomString,
                               _sizeUnit    = FilmSizeUnit.Centimeter,
                               _width       = 29.7f,
                               _height      = 42.0f
                           }
                }
                ;

                if (dicomString == "A4")
                {
                    return new FilmSize
                           {
                               _dicomString = dicomString,
                               _sizeUnit    = FilmSizeUnit.Centimeter,
                               _width       = 21.0f,
                               _height      = 29.7f
                           }
                }
                ;

                var indexOfX = dicomString.IndexOf('X');
                if (indexOfX < 3)                 // at least one char for width, and 2 chars for units
                {
                    throw new InvalidFilmSizeException(dicomString);
                }

                var firstUnit  = dicomString.Substring(indexOfX - 2, 2);
                var secondUnit = dicomString.Substring(dicomString.Length - 2);
                if (firstUnit != "CM" && firstUnit != "IN")
                {
                    throw new InvalidFilmSizeException(dicomString);
                }
                if (firstUnit != secondUnit)
                {
                    throw new InvalidFilmSizeException(dicomString);
                }

                var xSeparatedDimension = dicomString.Replace("IN", "").Replace("CM", "").Replace('_', '.');
                var dimensions          = StringUtilities.SplitQuoted(xSeparatedDimension, "X");

                var filmSize = new FilmSize
                {
                    _dicomString = dicomString,
                    _sizeUnit    = firstUnit == "IN" ? FilmSizeUnit.Inch : FilmSizeUnit.Centimeter,
                    _width       = float.Parse(dimensions[0], CultureInfo.InvariantCulture),
                    _height      = float.Parse(dimensions[1], CultureInfo.InvariantCulture),
                };
                return(filmSize);
            }
            catch (NotSupportedException)
            {
                throw;
            }
            catch (InvalidFilmSizeException)
            {
                throw;
            }
            catch (Exception e)
            {
                throw new InvalidFilmSizeException(dicomString, e);
            }
        }