示例#1
0
        private async void btnCreateFile_Click(object sender, EventArgs e)
        {
            FrequencyGenerator fg    = new FrequencyGenerator();
            Stopwatch          watch = new Stopwatch();

            lblStatus.Text = "Calculating Frequencies...";
            watch.Start();
            await Task.Run(() => fg.GenerateFromImage(ImageData.ImageMatrix));

            lblStatus.Text = "Constructing Tree...";
            HuffmanTree tree = new HuffmanTree(fg);
            await Task.Run(() => tree.ConstructTree());

            BinaryFile file = new BinaryFile(ImageData.ImageMatrix, ImageData.InitialSeed, ImageData.TapPosition, ImageData.Width, ImageData.Height, ImageData.NumberOfBits, tree);

            lblStatus.Text = "Creating Binary File.";
            await Task.Run(() => file.Create(txtFileName.Text));

            watch.Stop();
            lblStatus.Text       = "Binary File Created.";
            lblTimeTaken.Visible = true;
            string te = watch.Elapsed.ToString(@"m\:ss");

            lblTimeTaken.Text = te;
        }
        private void btnColorFrequencies_Click(object sender, EventArgs e)
        {
            FrequencyGenerator fg = new FrequencyGenerator();

            fg.GenerateFromImage(ImageMatrix);
            ColorFrequenciesForm frequenciesForm = new ColorFrequenciesForm(fg);

            frequenciesForm.Show();
        }
        private void btnCompress_Click(object sender, EventArgs e)
        {
            FrequencyGenerator fg = new FrequencyGenerator();

            fg.GenerateFromImage(ImageMatrix);
            HuffmanTree tree = new HuffmanTree(fg);

            tree.ConstructTree();
            ImageData        data         = new ImageData(ImageWidth, ImageHeight, TapPosition, InitialSeed, NumberOfBits, ImageMatrix);
            CompressFileForm compressForm = new CompressFileForm(data, tree);

            compressForm.Show();
        }
        private void btnConstructHuffmanTree_Click(object sender, EventArgs e)
        {
            FrequencyGenerator fg = new FrequencyGenerator();

            fg.GenerateFromImage(ImageMatrix);
            HuffmanTree tree = new HuffmanTree(fg);

            tree.ConstructTree();
            tree.GetStringRepresentation();
            HuffmanTreeForm treeConstructionForm = new HuffmanTreeForm(tree);

            treeConstructionForm.Show();
        }
 //TOTAL:O(1)
 public HuffmanTree(FrequencyGenerator FG)                          //O(1)
 {
     Frequencies           = FG;                                    //O(1)
     RedTree               = new PriorityQueue <Node>();            //O(1)
     GreenTree             = new PriorityQueue <Node>();            //O(1)
     BlueTree              = new PriorityQueue <Node>();            //O(1)
     RedEncodings          = new Dictionary <byte, List <bool> >(); // O(1)
     GreenEncodings        = new Dictionary <byte, List <bool> >(); //O(1)
     BlueEncodings         = new Dictionary <byte, List <bool> >(); // O(1)
     RedRoot               = new Node();                            // O(1)
     GreenRoot             = new Node();                            // O(1)
     BlueRoot              = new Node();                            //O(1)
     ReverseRedEncodings   = new Dictionary <List <bool>, byte>();  //O(1)
     ReverseGreenEncodings = new Dictionary <List <bool>, byte>();  //O(1)
     ReverseBlueEncodings  = new Dictionary <List <bool>, byte>();  //O(1)
 }
示例#6
0
 public ColorFrequenciesForm(FrequencyGenerator fg)
 {
     InitializeComponent();
     ColorFrequencies = fg;
 }
示例#7
0
        //TOTAL :O(N^2)
        public void Read(string fileName)
        {
            try
            {
                FileStream   fin = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); //O(1)
                BinaryReader br  = new BinaryReader(fin);                                                         //O(1)
                br.BaseStream.Seek(0, SeekOrigin.Begin);                                                          //O(1)
                //=========================== Reading Image Metadata =========================

                ImageWidth   = br.ReadInt32(); //O(1)
                ImageHeight  = br.ReadInt32(); //O(1)
                InitialSeed  = br.ReadInt64(); //O(1)
                TapPosition  = br.ReadByte();  //O(1)
                NumberOfBits = br.ReadByte();  //O(1)
                //============================================================================

                Image = new RGBPixel[ImageHeight, ImageWidth];    //O(1)
                FrequencyGenerator fg = new FrequencyGenerator(); //O(1)

                //-----------------Reading Red Frequencies----------------//
                int redCount = br.ReadInt16();     //O(1)
                for (int i = 0; i < redCount; i++) //O(L) : L represents redcount
                {
                    byte red = br.ReadByte();      //O(1)
                    int  val = br.ReadInt32();     //O(1)
                    fg.RedFrequencies[red] = val;  //O(1)
                }

                //----------------Reading Green Frequencies----------------//
                int greenCount = br.ReadInt16();      //O(1)
                for (int i = 0; i < greenCount; i++)  //O(L) :L represents greencolor
                {
                    byte green = br.ReadByte();       //O(1)
                    int  val   = br.ReadInt32();      //O(1)
                    fg.GreenFrequencies[green] = val; //O(1)
                }

                //-----------------Reading Blue Frequencies----------------//
                int blueCount = br.ReadInt16();     //O(1)
                for (int i = 0; i < blueCount; i++) //O(L) :L represents bluecolor
                {
                    byte blue = br.ReadByte();      //O(1)
                    int  val  = br.ReadInt32();     //O(1)
                    fg.BlueFrequencies[blue] = val; //O(1)
                }

                //---------------- Reconstructing the tree -----------------//
                Tree = new HuffmanTree(fg);           //O(1)
                Tree.ConstructTree();
                Tree.GenerateAnotherEncodings();      //O(l log l)
                //------------------------------------------------------------
                FileReader fr = new FileReader(br);   //O(1)
                for (int i = 0; i < ImageHeight; i++) //O(N^2)
                {
                    for (int j = 0; j < ImageWidth; j++)
                    {
                        //--------------------------------------- Red ----------------
                        StringBuilder sb = new StringBuilder(); //O(1)
                        while (true)
                        {
                            sb.Append(fr.ReadBitChar());                            //O(1) : StringBuilder appends in O(1) time as it uses linked list implementation
                            string val = sb.ToString();                             // O(L) : L is the length of the string currently in the builder
                            if (Tree.IntReverseRedEncodings.ContainsKey(val))       // O(1)
                            {
                                Image[i, j].red = Tree.IntReverseRedEncodings[val]; //O(1)
                                break;
                            }
                        }
                        //---------------------------------------- Green --------------
                        sb = new StringBuilder();
                        while (true)                                                    //O(1)
                        {
                            sb.Append(fr.ReadBitChar());                                ////O(1) : StringBuilder appends in O(1) time as it uses linked list implementation
                            string val = sb.ToString();                                 //O(L) : L is the length of the string currently in the builder
                            if (Tree.IntReverseGreenEncodings.ContainsKey(val))         //O(1)
                            {
                                Image[i, j].green = Tree.IntReverseGreenEncodings[val]; //O(1);
                                break;
                            }
                        }
                        //------------------------------------------- Blue ---------------
                        sb = new StringBuilder();                                     //O(1)
                        while (true)                                                  //O(1)
                        {
                            sb.Append(fr.ReadBitChar());                              //O(1)
                            string val = sb.ToString();                               //O(L) : L is the length of the string currently in the builder
                            if (Tree.IntReverseBlueEncodings.ContainsKey(val))        //O(1)
                            {
                                Image[i, j].blue = Tree.IntReverseBlueEncodings[val]; //O(1)
                                break;
                            }
                        }
                    }
                }
            }

            catch (IOException e)
            {
                Console.WriteLine("An IO Exception Occurred :" + e);
            }
        }