/// <summary>
        /// Loads texture image from stream</summary>
        /// <param name="imageStream">Stream holding texture image</param>
        /// <returns>Texture image</returns>
        public Image LoadImage(Stream imageStream)
        {
            TgaHeader header;

            byte[] pixels;

            using (BinaryReader reader = new BinaryReader(imageStream))
            {
                header = ReadHeader(reader);
                ImageDataType dataType = (ImageDataType)header.dataType;

                switch ((ImageDataType)header.dataType)
                {
                case ImageDataType.UncompressedUnmappedColor:
                case ImageDataType.RleCompressedUnmappedColor:
                case ImageDataType.UncompressedMappedColor:
                    break;

                default:
                    throw new NotImplementedException("Unsupported Targa image type '" + dataType.ToString() + "'");
                }

                ReadIdString(reader, header);

                byte[] colorMap = ReadColorMap(reader, header);
                pixels = ReadPixels(reader, header, colorMap);
            }

            int pixelFormat      = CalculateOpenGlPixelFormat(header);
            int elementsPerPixel = GetPixelDepth(header) / 8;

            return(new Image(header.imageWidth, header.imageHeight, pixels, 1, pixelFormat, elementsPerPixel));
        }