[Project]JpegDecoder DHT to Huffman Code Part
//DHT PART
static List<DHTCode> DHTReader() { int LengthDHT = OriginPicture.ReadByte() * 0xFF + OriginPicture.ReadByte(); int TableNo = OriginPicture.ReadByte(); int[] L = new int[16]; int LengthV = 0; for (int i = 0; i < 16; i++) { L[i] = OriginPicture.ReadByte(); LengthV += L[i]; } int[] V = new int[LengthV]; for (int i = 0; i < LengthV; i++) { V[i] = OriginPicture.ReadByte(); } List<DHTCode> DHTCodeCollection = new List<DHTCode>(); //if (L[0] == 0) DHTCodeCollection[0] = new DHTCode(1, 1, "0", V[0]); //else DHTCodeCollection[0] = new DHTCode(0, 2, "00", V[0]); string PrevCode = ""; int FirstI = 0; int CurrDHT = 0; for (int i = 0; i < 16; i++) { if (L[i] != 0) { for (int j = 0; j < L[i]; j++) { if (PrevCode=="") { string C = ""; for (int Cont = 0; Cont <= i; Cont++) { C += '0'; } PrevCode = C; DHTCodeCollection.Add(new DHTCode(CurrDHT, C.Length, C, V[CurrDHT])); CurrDHT++; } else { string C = PrevCode; int Prev = Convert.ToInt32(C, 2); Prev++; C = Convert.ToString(Prev, 2); Prev = PrevCode.Length - C.Length; for (int Set = 0; Set < Prev; Set++) { C = "0" + C; } DHTCodeCollection.Add(new DHTCode(CurrDHT, C.Length, C, V[CurrDHT])); CurrDHT++; PrevCode = C; } } FirstI = i; break; } } for (int i = FirstI + 1; i < 16; i++) { for (int j = 0; j < L[i]; j++) { string C = PrevCode; int Prev = Convert.ToInt32(C, 2); Prev++; C = Convert.ToString(Prev, 2); Prev = PrevCode.Length - C.Length; for (int Set = 0; Set < Prev; Set++) { C = "0" + C; } Prev = i - C.Length + 1; for (int Set = 0; Set < Prev; Set++) { C = C + "0"; } DHTCodeCollection.Add(new DHTCode(CurrDHT, C.Length, C, V[CurrDHT])); CurrDHT++; PrevCode = C; } } return DHTCodeCollection; } }