/// <summary>
        /// Tries to match imageHeaderByte and headerSize against every known
        /// image format. If any match succeeds, corresponding ImageFormat
        /// is returned.
        /// </summary>
        /// <returns>
        /// ImageFormat for given imageHeaderBytes or UNKNOWN if no such type
        /// could be recognized.
        /// </returns>
        private static ImageFormat DoGetImageFormat(
            byte[] imageHeaderBytes,
            int headerSize)
        {
            Preconditions.CheckNotNull(imageHeaderBytes);

            if (WebpSupportStatus.IsWebpHeader(imageHeaderBytes, 0, headerSize))
            {
                return(GetWebpFormat(imageHeaderBytes, headerSize));
            }

            if (IsJpegHeader(imageHeaderBytes, headerSize))
            {
                return(ImageFormat.JPEG);
            }

            if (IsPngHeader(imageHeaderBytes, headerSize))
            {
                return(ImageFormat.PNG);
            }

            if (IsGifHeader(imageHeaderBytes, headerSize))
            {
                return(ImageFormat.GIF);
            }

            if (IsBmpHeader(imageHeaderBytes, headerSize))
            {
                return(ImageFormat.BMP);
            }

            return(ImageFormat.UNKNOWN);
        }
        /// <summary>
        /// Determines type of WebP image. imageHeaderBytes has to be header
        /// of a WebP image.
        /// </summary>
        private static ImageFormat GetWebpFormat(byte[] imageHeaderBytes, int headerSize)
        {
            Preconditions.CheckArgument(WebpSupportStatus.IsWebpHeader(imageHeaderBytes, 0, headerSize));
            if (WebpSupportStatus.IsSimpleWebpHeader(imageHeaderBytes, 0))
            {
                return(ImageFormat.WEBP_SIMPLE);
            }

            if (WebpSupportStatus.IsLosslessWebpHeader(imageHeaderBytes, 0))
            {
                return(ImageFormat.WEBP_LOSSLESS);
            }

            if (WebpSupportStatus.IsExtendedWebpHeader(imageHeaderBytes, 0, headerSize))
            {
                if (WebpSupportStatus.IsAnimatedWebpHeader(imageHeaderBytes, 0))
                {
                    return(ImageFormat.WEBP_ANIMATED);
                }

                if (WebpSupportStatus.IsExtendedWebpHeaderWithAlpha(imageHeaderBytes, 0))
                {
                    return(ImageFormat.WEBP_EXTENDED_WITH_ALPHA);
                }

                return(ImageFormat.WEBP_EXTENDED);
            }

            return(ImageFormat.UNKNOWN);
        }