//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); }
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); }
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); }
public void CompressAndDecompressTextSafe() { // Arrange... var inputString = "aaaaaaaaa"; // Act... var compressedString = DymeCompression.Compress(inputString, true, '>'); var result = DymeCompression.Decompress(compressedString); // Assert... Assert.AreEqual(inputString, result); }
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); }
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); }
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); }
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); }
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; }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }