public void ExploreFile(BinaryReader Pic, Queue <SignInfo> existingSigns) { byte[] buff = new byte[4]; string hexBuff = null; string hexSign = null; string sign_name = null; int iterator = 0; do { buff[0] = buff[1]; buff[1] = buff[2]; buff[2] = buff[3]; buff[3] = Pic.ReadByte(); hexBuff = BitConverter.ToString(buff); for (int i = 0; i < 21; i++) { if (hexBuff == signs[i, 1]) { if (hexSign == null) { hexSign = hexBuff; sign_name = signs[i, 0]; } else { SignInfo sign = new SignInfo(); sign.Sign = sign_name; sign.hexSign = hexSign; sign.byteLength = iterator - 12; existingSigns.Enqueue(sign); hexSign = hexBuff; sign_name = signs[i, 0]; } iterator = 0; } } iterator++; } while (!(hexBuff == IEND_sign)); }
public static void Main(string[] args) { PNG_signs signs = new PNG_signs(); IHDR ihdr = new IHDR(); Queue <SignInfo> existingSigns = new Queue <SignInfo>(); string fileName = "data\\Screen_color_test_Amiga_4colors.png"; string fileDir = Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory()))); string filePath = Path.Combine(fileDir, fileName); int chunk; BinaryReader test = new BinaryReader(File.OpenRead(filePath)); if (!(signs.IsPNG(test))) { Console.WriteLine("Obraz nie PNG"); } signs.ExploreFile(test, existingSigns); /*while(existingSigns.Count != 0) * { * existingSigns.Dequeue().Display(); * }*/ //DO USUNIECIA - TESTOWE WCZYTANIE /* * string hex = ""'' * if (File.Exists(filePath)) * { * byte[] bytes = File.ReadAllBytes(filePath); * hex = BitConverter.ToString(bytes); * } * * Console.WriteLine(hex); * Console.WriteLine("Wypisano"); * Console.WriteLine(filePath); */ BinaryReader Pic = new BinaryReader(File.OpenRead(filePath)); if (signs.IsPNG(Pic)) { Console.WriteLine("Obraz PNG"); } while (existingSigns.Count != 0) { SignInfo s = existingSigns.Dequeue(); chunk = signs.FindSign(Pic, s.hexSign); if (chunk == 1) { Console.WriteLine("\n[{0}], byteLength: {1}\n", s.Sign, s.byteLength); if (s.Sign == "IHDR") { ihdr.ReadData(Pic); ihdr.DisplayData(); } else if (s.Sign == "PLTE") { Console.WriteLine(" - colorQuantity: {0}", s.byteLength / 3); } else if (s.Sign == "gAMA") { int gama = Int32.Parse(BitConverter.ToString(Pic.ReadBytes(4)).Replace("-", ""), System.Globalization.NumberStyles.HexNumber); Console.WriteLine(" - gama: {0}", (double)gama / 100000); } else if (s.Sign == "cHRM") { cHRM chrm = new cHRM(); chrm.ReadData(Pic); chrm.DisplayData(); } else { Console.WriteLine(BitConverter.ToString(Pic.ReadBytes(s.byteLength))); } } } Console.WriteLine("\n[IEND]\n"); }