コード例 #1
0
ファイル: Program.cs プロジェクト: rtsonneveld/Rayman2Lib
        static void Main(string[] args)
        {
            EncodedStream stream = new EncodedStream(File.ReadAllBytes(@"D:\GOG Games\Rayman 2\Data\World\Levels\Learn_30\Learn_30.sna"));
            var           r      = new BinaryReader(stream);

            stream.Seek(4, SeekOrigin.Current);               // SNA's magic number is not encoded

            stream.SeekWithUpdatedMagic(-4 + 0x5a242 - 0x46); // Move to portal stone structure start

            // Texture entry

            int something1 = r.ReadInt32();
            int something2 = r.ReadInt32();

            int something3 = r.ReadInt32();

            int something4 = r.ReadInt32();
            int something5 = r.ReadInt32();

            int something6 = r.ReadInt32();

            short something7     = r.ReadInt16();
            short something8     = r.ReadInt16();
            short texture_width  = r.ReadInt16(); // Not sure
            short texture_height = r.ReadInt16(); // Not sure

            int something11 = r.ReadInt32();
            int something12 = r.ReadInt32();
            int something13 = r.ReadInt32();

            int something14 = r.ReadInt32();

            var something15 = r.ReadBytes(21);

            byte something16 = r.ReadByte();

            string texture_name = r.ReadNullTermStringWithLength(130);

            Console.WriteLine("something1: " + something1);
            Console.WriteLine("something2: " + something2);
            Console.WriteLine("something3: " + something3);
            Console.WriteLine("something4: " + something4);
            Console.WriteLine("something5: " + something5);
            Console.WriteLine("something6: " + something6);
            Console.WriteLine("something7: " + something7);
            Console.WriteLine("something8: " + something8);
            Console.WriteLine("texture_width: " + texture_width);
            Console.WriteLine("texture_height: " + texture_height);
            Console.WriteLine("something11: " + something11);
            Console.WriteLine("something12: " + something12);
            Console.WriteLine("something13: " + something13);
            Console.WriteLine("something14: " + something14);
            Console.WriteLine("something15: " + something15);
            Console.WriteLine("something16: " + something16);
            Console.WriteLine("texture_name: " + texture_name);

            Console.ReadLine();
        }
コード例 #2
0
        private void OpenButton_Click(object sender, RoutedEventArgs e)
        {
            var dialog = new OpenFileDialog();

            if (dialog.ShowDialog() == true)
            {
                try
                {
                    Stream?.Close();

                    if (dialog.FileName.EndsWith("fasta"))
                    {
                        Stream = EncodedStream.Open(dialog.FileName, FileMode.Open);
                    }
                    else
                    {
                        Stream = File.OpenRead(dialog.FileName);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Не удалось открыть данный файл: {ex.Message}", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }

                filePath.Text    = FilePath = dialog.FileName;
                fileSize.Content = "Размер: " + (Stream.Length > 1024
                    ? Stream.Length / 1024 + " кб."
                    : Stream.Length + " б.");

                var wordLength = (Stream as EncodedStream)?.Coder.WordLength ?? 0;

                formatType.Content = "Формат: " + (wordLength == 4
                    ? "4 CC"
                    : wordLength > 0
                        ? "3 CC"
                        : "не законидированный");

                codeWordLength.Content = "Длина кодового слова: " + wordLength;

                noCoder.IsChecked      = wordLength == 0;
                coder3Button.IsChecked = wordLength == 3;
                coder4Button.IsChecked = wordLength != 3;

                saveButton.IsEnabled = true;
            }
        }
コード例 #3
0
 private void decodeButton_Click(object sender, EventArgs e)
 {
     openFileDialog1.Filter = "";
     if (openFileDialog1.ShowDialog() == DialogResult.OK && File.Exists(openFileDialog1.FileName))
     {
         saveFileDialog1.FileName = new FileInfo(openFileDialog1.FileName).Name + ".decoded";
         if (saveFileDialog1.ShowDialog() == DialogResult.OK)
         {
             var stream = new EncodedStream(File.ReadAllBytes(openFileDialog1.FileName));
             stream.Seek(4, SeekOrigin.Current);
             byte[] buff = new byte[stream.Length];
             buff[0] = 0x79;
             buff[1] = 0xCC;
             buff[2] = 0xB5;
             buff[3] = 0x6A;
             stream.Read(buff, 4, (int)stream.Length - 4);
             File.WriteAllBytes(saveFileDialog1.FileName, buff);
             stream.Close();
             MessageBox.Show("File decoded!");
         }
     }
 }
コード例 #4
0
ファイル: StreamTests.cs プロジェクト: Svabik/AdamMil.net
        public void TestEncodedStream()
        {
            byte[] bytes = new byte[512];
            for (int i = 0; i < bytes.Length; i++)
            {
                bytes[i] = (byte)(i < 256 ? i : 511 - i);
            }

            MemoryStream ms = new MemoryStream();

            using (EncodedStream stream = new EncodedStream(ms, new Base64Encoding(), false)) stream.Write(bytes, 0, bytes.Length);
            Assert.AreEqual((bytes.Length + 2) / 3 * 4, ms.Length);
            Assert.AreEqual(Convert.ToBase64String(bytes), SimpleEightBitEncoding.Instance.GetString(ms.ToArray()));

            ms.Position = 0;
            using (EncodedStream stream = new EncodedStream(ms, new Base64Encoding(), false))
            {
                byte[] bytesRead = new byte[bytes.Length];
                Assert.AreEqual(bytesRead.Length, stream.Read(bytesRead, 0, bytesRead.Length));
                Assert.AreEqual(-1, stream.ReadByte());
                TestHelpers.AssertArrayEquals(bytes, bytesRead);
            }
        }