JulianJulianov

Image compression

Jun 7th, 2020
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 0.18 KB | None | 0 0
  1. From .jpeg to .png
  2. Данните за изображението трябва да бъдат компресирани с кодиране на дължината на изпълнение (Run-length encoding (RLE) ). Това означава, че повтарящите се символи се събират сбито и само числото и съответният символ '§', който не присъства в снимката като информация, се записват. Компресията (сбиването на информацията) се прави само от повече от 3 повтарящи се символи!
  3.  
  4. Input                                                          Output
  5. QQQQRRRRRRTTTTTTTTTTLLLLLLLLLLLMNNNVVVVVVVVVVVAAAAAAAAAAAAA    §4Q§6R§10T§11LMNNN§11V§13A
  6. QQQWWWEEERRRTTTYYY                                             QQQWWWEEERRRTTTYYY
  7.  
  8. using System;
  9. using System.Text;
  10.        
  11. public class Program
  12. {
  13.     public static void Main()
  14.     {
  15.          var jpegPicture = Console.ReadLine();
  16.          var counterSymbols = 0;
  17.          var compressionSymbols = "";
  18.          for (int i = 0; i < jpegPicture.Length; i++)
  19.          {
  20.              counterSymbols++;
  21.              if (jpegPicture.Length - 1 != i)
  22.              {
  23.                  if (jpegPicture[i] != jpegPicture[i + 1])
  24.                  {
  25.                      if (counterSymbols > 3)
  26.                      {
  27.                          compressionSymbols += '§'.ToString() + counterSymbols + jpegPicture[i].ToString();
  28.                          counterSymbols = 0;
  29.                      }
  30.                      else
  31.                      {
  32.                          for (int a = 1; a <= counterSymbols; a++)
  33.                          {
  34.                             compressionSymbols += jpegPicture[i].ToString();
  35.                          }            
  36.                          counterSymbols = 0;
  37.                       }
  38.                   }
  39.               }
  40.               else
  41.               {
  42.                   if (jpegPicture.Length - 1 == i && counterSymbols <= 3)
  43.                     {
  44.                         for (int a = 1; a <= counterSymbols; a++)
  45.                         {
  46.                             compressionSymbols += jpegPicture[i].ToString();
  47.                         }
  48.                     }
  49.                     else
  50.                     {
  51.                         compressionSymbols += '§'.ToString() + counterSymbols + jpegPicture[i].ToString();
  52.                     }
  53.               }
  54.          }
  55.          var pngPicture = compressionSymbols;
  56.          Console.WriteLine(pngPicture);
  57.  
  58.             //var imageData = Console.ReadLine();                //Друго решение
  59.             //var compressedData = new StringBuilder();
  60.  
  61.             //if (imageData.Length > 0)
  62.             //{
  63.             //    int repeatingChars = 0;
  64.  
  65.             //    for (int i = 0; i < imageData.Length; i++)
  66.             //    {
  67.             //        repeatingChars++;
  68.  
  69.             //        if (i == imageData.Length - 1 || imageData[i] != imageData[i + 1])
  70.             //        {
  71.             //            if (repeatingChars >= 4)
  72.             //            {
  73.             //                compressedData.Append($"§{repeatingChars}{imageData[i]}");
  74.             //                repeatingChars = 0;
  75.             //            }
  76.             //            else
  77.             //            {
  78.             //                compressedData.Append(imageData[i], repeatingChars);//Така се добавя символа няколко пъти!
  79.             //                repeatingChars = 0;
  80.             //            }
  81.             //        }
  82.             //    }
  83.             //}
  84.             //Console.WriteLine(compressedData);
  85.     }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment