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) }
public ColorFrequenciesForm(FrequencyGenerator fg) { InitializeComponent(); ColorFrequencies = fg; }
//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); } }