Exemple #1
0
        //private static void PreSerializeStubOutImageDataIfRawImageData(ref Catalog catalog)
        //{
        //	var entries = catalog.Entries.ToArray();
        //	// Serialize the mutations...
        //	for (var i = 0; i < entries.Count(); i++)
        //	{
        //		var entry = entries[i];
        //		if (entry == null) continue;
        //		//entry.Mutation.Img_RGB24_W1000H1000_64bEncoded = "";//IMAGE_PLACEHOLDER.Replace("{ImageIndex}", i.ToString());
        //	}
        //}

        private static string PostSerializeInjectImageData(string catalogData, Catalog catalog)
        {
            var entries = catalog.Entries.ToArray();

            // Inject image data... (we do this after serialization because the JSON serializer can't handle the size of the image data, and tends to crash.).
            catalogData += IMAGE_SECTION_PREFIX;
            for (var i = 0; i < entries.Count(); i++)
            {
                var    entry = entries[i];
                string imageData;
                if (!string.IsNullOrEmpty(entry.ImageInfo.ExternalPath))
                {
                    imageData = entry.ImageInfo.ExternalPath;
                }
                else
                {
                    if (entry.ImageInfo.Format == TextureFormat.DXT1)
                    {
                        // Perform DXT compression...
                        entry.ImageInfo.Texture.Compress(false);
                        entry.ImageInfo.Texture.Apply();
                    }
                    byte[] bytes_        = entry.ImageInfo.Texture.GetRawTextureData();
                    string bytesAsString = (entry.ImageInfo.IsB64Encoded) ? B64EncodeBytes(bytes_) : GetStringFromBytes(bytes_);
                    if (entry.ImageInfo.IsDymeCompressed)
                    {
                        bytesAsString = DymeCompression.Compress(bytesAsString);
                    }
                    imageData = bytesAsString;
                }
                var imageStartTag = IMAGE_TAG_FRONT_PART + i + IMAGE_TAG_BACK_PART;
                catalogData += imageStartTag + imageData;
            }
            return(catalogData);
        }
Exemple #2
0
        public void FileTest_NoCompression_TextFriendly()
        {
            // Arrange...
            var filePath = $@"{Directory.GetCurrentDirectory()}\TestFiles\UncompressedImages\1_Chair_Filled.1K_1K_24RGB.bytes";
            var fileData = File.ReadAllBytes(filePath);
            var b64      = Convert.ToBase64String(fileData);

            // Act...
            var compressedString = DymeCompression.Compress(b64, true, '|');
            var result           = DymeCompression.Decompress(compressedString);

            // Assert...
            // Make sure compression was lossless...
            Assert.AreEqual(b64, result);
            // Assert compression percentage...
            var compressionPercentage = b64.Length / compressedString.Length * 100;

            Assert.AreEqual("0%", compressionPercentage + "%");
            // Assert saved bytes...
            var   originalStringLength   = b64.Length;
            var   compressedStringLength = compressedString.Length;
            var   savedBytes             = originalStringLength - compressedStringLength;
            float savedMegaBytes         = savedBytes / 1000000f;

            Assert.AreEqual(-2, savedBytes);
        }
Exemple #3
0
        public void FileTest_MoreCompressionDueToImageSparcity()
        {
            // Arrange...
            var filePath = $@"{Directory.GetCurrentDirectory()}\TestFiles\UncompressedImages\2_Chair_NotFilled.1K_1K_24RGB.bytes";
            var fileData = File.ReadAllText(filePath);

            // Act...
            var compressedString = DymeCompression.Compress(fileData);
            var result           = DymeCompression.Decompress(compressedString);

            // Assert...
            // Make sure compression is lossless...
            Assert.AreEqual(fileData, result);
            // Assert compression percentage...
            var compressionPercentage = fileData.Length / compressedString.Length * 100;

            Assert.AreEqual("500%", compressionPercentage + "%");
            // Assert saved bytes...
            var originalStringLength   = fileData.Length;
            var compressedStringLength = compressedString.Length;
            var savedBytes             = originalStringLength - compressedStringLength;
            int savedMegaBytes         = savedBytes / 1000000;

            Assert.AreEqual(2, savedMegaBytes);
        }
Exemple #4
0
        public void CompressAndDecompressTextSafe()
        {
            // Arrange...
            var inputString = "aaaaaaaaa";
            // Act...
            var compressedString = DymeCompression.Compress(inputString, true, '>');
            var result           = DymeCompression.Decompress(compressedString);

            // Assert...
            Assert.AreEqual(inputString, result);
        }
Exemple #5
0
        public void CompressTextSafe()
        {
            // Arrange...
            var sut         = new DymeCompression();
            var inputString = "aaaaaaaaa";
            var expectedCompressedString = ">a19>1";
            // Act...
            var result = DymeCompression.Compress(inputString, true, '>');

            // Assert...
            Assert.AreEqual(expectedCompressedString, result);
        }
Exemple #6
0
        public void DoesNotCompress4()
        {
            // Arrange...
            var sut         = new DymeCompression();
            var inputString = "aaaa";
            var expectedCompressedLength = 4;

            // Act...
            var result = DymeCompression.Compress(inputString);

            // Assert...
            Assert.AreEqual(expectedCompressedLength, result.Length);
        }
Exemple #7
0
        public void CompressesStartsAndEndsCapped()
        {
            // Arrange...
            var sut         = new DymeCompression();
            var inputString = "baaaaab";
            var expectedCompressedLength = 8;

            // Act...
            var result = DymeCompression.Compress(inputString);

            // Assert...
            Assert.AreEqual(expectedCompressedLength, result.Length);
        }
Exemple #8
0
        public void Compresses2Kinds()
        {
            // Arrange...
            var sut         = new DymeCompression();
            var inputString = "aaaaabbbbb";
            var expectedCompressedLength = 10;

            // Act...
            var result = DymeCompression.Compress(inputString);

            // Assert...
            Assert.AreEqual(expectedCompressedLength, result.Length);
        }
Exemple #9
0
        private static void LoadDataTexture(string imageData, CatalogEntry entry)
        {
            if (entry.ImageInfo.IsB64Encoded)
            {
                imageData = DymeCompression.Decompress(imageData);
            }
            byte[] bytes = (entry.ImageInfo.IsB64Encoded) ? B64DecodeBytes(imageData) : GetBytesFromString(imageData);
            //===================================================================
            Texture2D texture = LoadImageForAppropriateCompressionFormat(entry, bytes);

            //===================================================================
            entry.ImageInfo.Texture = texture;
        }
Exemple #10
0
        public void Decompresses2KindsCappedOnEitherSideAndMiddle()
        {
            // Arrange...
            var sut         = new DymeCompression();
            var inputString = "caaaaacbbbbbc";

            // Act...
            var compressedString = DymeCompression.Compress(inputString);
            var result           = DymeCompression.Decompress(compressedString);

            // Assert...
            Assert.AreEqual(inputString, result);
        }
Exemple #11
0
        public void Decompresses2Kinds()
        {
            // Arrange...
            var sut         = new DymeCompression();
            var inputString = "aaaaabbbbb";

            // Act...
            var compressedString = DymeCompression.Compress(inputString);
            var result           = DymeCompression.Decompress(compressedString);

            // Assert...
            Assert.AreEqual(inputString, result);
        }
Exemple #12
0
        public void DecompressesStartsAndEndsCapped()
        {
            // Arrange...
            var sut         = new DymeCompression();
            var inputString = "baaaaab";

            // Act...
            var compressedString = DymeCompression.Compress(inputString);
            var result           = DymeCompression.Decompress(compressedString);

            // Assert...
            Assert.AreEqual(inputString, result);
        }
Exemple #13
0
        public void Compresses2KindsCappedOnEitherSideAndMiddle()
        {
            // Arrange...
            var sut         = new DymeCompression();
            var inputString = "caaaaacbbbbbc";
            var expectedCompressedLength = 13;

            // Act...
            var result = DymeCompression.Compress(inputString);

            // Assert...
            Assert.AreEqual(expectedCompressedLength, result.Length);
        }
Exemple #14
0
        public void DecompressBytes()
        {
            // Arrange...
            var sut = new DymeCompression();

            byte[] buffer = new byte[] { 40, 40, 40, 40, 40, 40 };
            byte[] expectedCompressedBuffer   = new byte[] { 40, 40, 40, 40, 40, 40 };
            byte[] expectedDecompressedBuffer = new byte[] { 40, 40, 40, 40, 40, 40 };
            var    compressedBufferLength     = DymeCompression.SequenceCompressAndReturnNewBufferLength(ref buffer, buffer.Length);

            // Act...
            var result = DymeCompression.SequenceDecompressBytes(buffer, compressedBufferLength);

            // Assert...
            Assert.AreEqual(result, expectedDecompressedBuffer);
        }
Exemple #15
0
        public void DefaultFlagByteIsInUse_ExpectUseNextAvailableByte()
        {
            // Arrange...
            var sut = new DymeCompression();

            byte expectedFlagByte = 2;

            byte[] testBuffer            = new byte[] { 1, 40, 40, 40, 40, 40, 40 };
            int    testBufferLength      = testBuffer.Length;
            var    compressedBytesLength = DymeCompression.SequenceCompressAndReturnNewBufferLength(ref testBuffer, testBufferLength);

            // Act...
            var result = testBuffer[compressedBytesLength - 2];

            // Assert...
            Assert.AreEqual(expectedFlagByte, result);
        }
Exemple #16
0
        public void CompressBytes()
        {
            // Arrange...
            var sut = new DymeCompression();

            byte[] testBuffer       = new byte[] { 40, 40, 40, 40, 40, 40 };
            int    testBufferLength = testBuffer.Length;
            var    originalLength   = 6;
            var    expectedLength   = 6;
            var    expectedSaving   = 0;

            // Act...
            var result = DymeCompression.SequenceCompressAndReturnNewBufferLength(ref testBuffer, testBufferLength);

            // Assert...
            Assert.AreEqual(originalLength, testBufferLength);
            Assert.AreEqual(expectedLength, result);
            Assert.AreEqual(expectedSaving, testBufferLength - result);
        }
Exemple #17
0
        public void AllFlagBytesAreUsed_DecompressStringThatHasNoCompression()
        {
            // Arrange...
            var sut         = new DymeCompression();
            var inputString = "";

            for (var i = 1; i < 256; i++)
            {
                inputString += Convert.ToChar(i);
            }
            inputString += "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
            var compressedString = DymeCompression.Compress(inputString);

            // Act...
            var result = DymeCompression.Decompress(compressedString);

            // Assert...
            Assert.AreEqual(inputString, result);
        }
Exemple #18
0
        public void CustomFlagByte()
        {
            // Arrange...
            var    sut         = new DymeCompression();
            var    inputString = "aaaaaaaaa";
            var    someNonB64CharButNotSpecial = '>';
            var    flagAsByte = Convert.ToByte(someNonB64CharButNotSpecial);
            var    rolledUpCharacterAsByte = Convert.ToByte('a');
            ushort rolledUpCount           = 9;

            byte[] rolledUpCountAsBytes = BitConverter.GetBytes(rolledUpCount);
            byte   isTextSafeAsByte     = Convert.ToByte('0');

            //..............................................[ Seq Start ] [--- Seq character ---]  [-------------Seq Length-----------------------] [ Seq Flag]  [Is Text Safe flag]
            byte[] expectedCompressedByteArray = new byte[] { flagAsByte, rolledUpCharacterAsByte, rolledUpCountAsBytes[0], rolledUpCountAsBytes[1], flagAsByte, isTextSafeAsByte };
            string expectedCompressedString    = new string(expectedCompressedByteArray.Select(b => Convert.ToChar(b)).ToArray());
            // Act...
            string result = DymeCompression.Compress(inputString, false, Convert.ToByte(someNonB64CharButNotSpecial));

            // Assert...
            Assert.AreEqual(expectedCompressedString, result);
        }
Exemple #19
0
        public void AllFlagBytesAreUsed_ExpectNoCompression()
        {
            // Arrange...
            var sut         = new DymeCompression();
            var inputString = "";

            for (var i = 1; i < 256; i++)
            {
                inputString += Convert.ToChar(i);
            }
            inputString += "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";

            var flagByteAsChar       = Convert.ToChar(0);
            var isTextSafe           = '0';
            var expectedOutputString = inputString + flagByteAsChar + isTextSafe;

            // Act...
            var result = DymeCompression.Compress(inputString);

            // Assert...
            Assert.AreEqual(expectedOutputString, result);
        }