Beispiel #1
0
        public string szSaveName; // Unicode save name( RM_MAXLENGTH chars )

        #endregion Fields

        #region Methods

        public static TRichGameHeader Create( byte[] xgpBytes )
        {
            Debug.Assert( xgpBytes != null );

            TRichGameHeader header = new TRichGameHeader();
            header.dwMagicNumber = BitConverter.ToUInt32( xgpBytes, 0 );
            if( header.dwMagicNumber != Const.RM_MAGICNUMBER ) {
                // TODO: RGMH不一致
            }
            header.dwHeaderVersion = BitConverter.ToUInt32( xgpBytes, 4 );
            header.dwHeaderSize = BitConverter.ToUInt32( xgpBytes, 8 );
            header.liThumnailOffset = BitConverter.ToInt64( xgpBytes, 12 );
            header.dwThumbnailSize = BitConverter.ToUInt32( xgpBytes, 20 );
            header.guidGameId = new TGUID();
            header.guidGameId.D1 = BitConverter.ToUInt32( xgpBytes, 24 );
            header.guidGameId.D2 = BitConverter.ToUInt16( xgpBytes, 28 );
            header.guidGameId.D3 = BitConverter.ToUInt16( xgpBytes, 30 );
            header.guidGameId.D4 = xgpBytes.Skip( 32 ).Take( 8 ).ToArray();
            header.szGameName = Utility.GetEncodeString( Encoding.Unicode, xgpBytes, 40, Const.RM_MAXLENGTH );
            header.szSaveName = Utility.GetEncodeString( Encoding.Unicode, xgpBytes, 40 + Const.RM_MAXLENGTH * 2, Const.RM_MAXLENGTH );
            header.szLevelName = Utility.GetEncodeString( Encoding.Unicode, xgpBytes, 40 + Const.RM_MAXLENGTH * 4, Const.RM_MAXLENGTH );
            header.szComments = Utility.GetEncodeString( Encoding.Unicode, xgpBytes, 40 + Const.RM_MAXLENGTH * 6, Const.RM_MAXLENGTH );

            return header;
        }
Beispiel #2
0
 private static void SaveThumnailJpeg( byte[] xgpBytes, TRichGameHeader header )
 {
     byte[] thumnail = xgpBytes.Skip( (int)header.dwHeaderSize ).Take( (int)header.dwThumbnailSize ).ToArray();
     File.WriteAllBytes( "thumnail.jpg", thumnail );
 }