public static void Write(this Stream stream, ByteColor color, ColorMemberOrder order)
        {
            switch (order)
            {
            case ColorMemberOrder.AlphaFirst:
                stream.Write(color.a);
                stream.Write(color.r);
                stream.Write(color.g);
                stream.Write(color.b);
                break;

            case ColorMemberOrder.AlphaLast:
                stream.Write(color.r);
                stream.Write(color.g);
                stream.Write(color.b);
                stream.Write(color.a);
                break;

            case ColorMemberOrder.NoAlpha:
                stream.Write(color.r);
                stream.Write(color.g);
                stream.Write(color.b);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(order), order, null);
            }
        }
        public static ByteColor ReadByteColor(this Stream stream, ColorMemberOrder order = ColorMemberOrder.AlphaFirst)
        {
            byte x = stream.Read1Byte();
            byte y = stream.Read1Byte();
            byte z = stream.Read1Byte();
            byte w = 0;

            if (order != ColorMemberOrder.NoAlpha)
            {
                w = stream.Read1Byte();
            }

            switch (order)
            {
            case ColorMemberOrder.AlphaFirst:
                return(new ByteColor(y, z, w, x));

            case ColorMemberOrder.AlphaLast:
                return(new ByteColor(x, y, z, w));

            case ColorMemberOrder.NoAlpha:
                return(new ByteColor(x, y, z));

            default:
                throw new ArgumentOutOfRangeException(nameof(order), order, null);
            }
        }