public int LoadUI(string InFile, string OutFolder) { int ImageNum = 0; StreamReader streamReader; try { streamReader = new StreamReader(InFile); } catch (Exception) { System.Console.WriteLine("Unable to open UI file:" + InFile); return(ImageNum); } string path = AppDomain.CurrentDomain.BaseDirectory + "\\" + OutFolder; try { Directory.CreateDirectory(path); } catch (Exception) { System.Console.WriteLine("Unable to create output folder:" + path); return(ImageNum); } StreamWriter streamWriter; string text = path + "\\UItable.csv"; try { streamWriter = new StreamWriter(text); } catch (Exception) { System.Console.WriteLine("Unable to generate UI table file:" + text); return(ImageNum); } FileInfo fileInfo = new FileInfo(InFile); fileDat = new byte[fileInfo.Length]; streamReader.BaseStream.Read(fileDat, 0, fileDat.Length); streamReader.Close(); spi_file_head_t spi_file_head_t = default(spi_file_head_t); byte[] array = new byte[Marshal.SizeOf((object)spi_file_head_t)]; Buffer.BlockCopy(fileDat, 0, array, 0, Marshal.SizeOf((object)spi_file_head_t)); spi_file_head_t = (spi_file_head_t)BytesToStruct(array, Marshal.SizeOf((object)spi_file_head_t), spi_file_head_t.GetType()); if (spi_file_head_t.magic_num == (SPI_FILE_MAGIC_BASE | 0xC)) { ui_head_t ui_head_t = default(ui_head_t); streamWriter.WriteLine("Image UID,Offset,Xpos,Ypos,Xwidth,Yheight,Reserved"); for (int i = 0; i < MaxImages; i++) { byte[] array5 = new byte[Marshal.SizeOf((object)ui_head_t)]; Buffer.BlockCopy(fileDat, 8 + i * Marshal.SizeOf((object)ui_head_t), array5, 0, Marshal.SizeOf((object)ui_head_t)); ui_head_t = (ui_head_t)BytesToStruct(array5, Marshal.SizeOf((object)ui_head_t), ui_head_t.GetType()); //Add entry to UI table streamWriter.WriteLine("{0},{1},{2},{3},{4},{5},{6}", (ui_head_t.ui_magic & 0xFFFF), ui_head_t.offset, ui_head_t.x_pos, ui_head_t.y_pos, ui_head_t.x_width, ui_head_t.y_height, ui_head_t.reserved); //Save image (if present) if (ui_head_t.ui_magic == 0) { continue; //Missing image. Skip. } if (ui_head_t.ui_magic == (uint)(i | (int)UI_BMP_MAGIC_BASE)) { if (ui_head_t.offset < fileDat.Length) { Buffer.BlockCopy(fileDat, ui_head_t.offset, array, 0, Marshal.SizeOf((object)spi_file_head_t)); spi_file_head_t = (spi_file_head_t)BytesToStruct(array, Marshal.SizeOf((object)spi_file_head_t), spi_file_head_t.GetType()); if (spi_file_head_t.magic_num != (uint)((int)UI_BMP_MAGIC_BASE | i)) { System.Console.WriteLine("Image header error: {0}", i); continue; } byte[] array6 = new byte[spi_file_head_t.file_size]; Buffer.BlockCopy(fileDat, ui_head_t.offset + Marshal.SizeOf((object)spi_file_head_t), array6, 0, (int)spi_file_head_t.file_size); if (m_ImageStream != null) { m_ImageStream.Close(); m_ImageStream.Dispose(); m_ImageStream = null; } string text2 = AppDomain.CurrentDomain.BaseDirectory + "\\" + OutFolder + "\\" + i.ToString() + ".bmp"; if (GetDataPicture(ui_head_t.x_width, ui_head_t.y_height, array6, text2)) { ImageNum++; BitmapImage bitmapImage = new BitmapImage(); m_ImageStream = new FileStream(text2, FileMode.Open); bitmapImage.BeginInit(); bitmapImage.StreamSource = m_ImageStream; bitmapImage.EndInit(); } else { System.Console.WriteLine("Image decoding error: {0}", i); streamWriter.Close(); return(ImageNum); } } else { System.Console.WriteLine("Image offset error:{0}", i); streamWriter.Close(); return(ImageNum); } } else { System.Console.WriteLine("Unable to generate image:{0}", i); streamWriter.Close(); return(ImageNum); } } } else { System.Console.WriteLine("Invalid UI file!"); streamWriter.Close(); return(ImageNum); } streamWriter.Close(); return(ImageNum); }
public int LoadUI(string InFile) { int ImageNum = 0; StreamReader streamReader; try { streamReader = new StreamReader(InFile); } catch (Exception) { System.Console.WriteLine("Unable to open UI file:" + InFile); return(ImageNum); } FileInfo fileInfo = new FileInfo(InFile); fileDat = new byte[fileInfo.Length]; streamReader.BaseStream.Read(fileDat, 0, fileDat.Length); streamReader.Close(); spi_file_head_t spi_file_head_t = default(spi_file_head_t); byte[] array = new byte[Marshal.SizeOf((object)spi_file_head_t)]; Buffer.BlockCopy(fileDat, 0, array, 0, Marshal.SizeOf((object)spi_file_head_t)); spi_file_head_t = (spi_file_head_t)BytesToStruct(array, Marshal.SizeOf((object)spi_file_head_t), spi_file_head_t.GetType()); if (spi_file_head_t.magic_num == (SPI_FILE_MAGIC_BASE | 0xC)) { if (spi_file_head_t.file_size + 8 < fileInfo.Length) { System.Console.WriteLine("The file contains multiple UIs. The file will be expanded into multiple UI files."); // string directoryName = Path.GetDirectoryName(InFile); string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(InFile); string extension = Path.GetExtension(InFile); for (int i = 0; i < fileInfo.Length; i += (int)(spi_file_head_t.file_size + 8)) { Buffer.BlockCopy(fileDat, i, array, 0, Marshal.SizeOf((object)spi_file_head_t)); spi_file_head_t = (spi_file_head_t)BytesToStruct(array, Marshal.SizeOf((object)spi_file_head_t), spi_file_head_t.GetType()); if (spi_file_head_t.magic_num != (SPI_FILE_MAGIC_BASE | 0xC)) { System.Console.WriteLine("UI error!"); break; } ui_head_t ui_head_t = default(ui_head_t); byte[] array2 = new byte[Marshal.SizeOf((object)ui_head_t)]; Buffer.BlockCopy(fileDat, i + 8 + Marshal.SizeOf((object)ui_head_t), array2, 0, Marshal.SizeOf((object)ui_head_t)); ui_head_t = (ui_head_t)BytesToStruct(array2, Marshal.SizeOf((object)ui_head_t), ui_head_t.GetType()); if (ui_head_t.ui_magic == (1 | UI_BMP_MAGIC_BASE)) { // string text = directoryName + "\\" + fileNameWithoutExtension + "_" + ui_head_t.x_width + "x" + ui_head_t.y_height + extension; string text = fileNameWithoutExtension + "_" + ui_head_t.x_width + "x" + ui_head_t.y_height + extension; StreamWriter streamWriter; try { streamWriter = new StreamWriter(text); } catch (Exception) { System.Console.WriteLine("Unable to generate file:" + text); return(ImageNum); } streamWriter.BaseStream.Write(fileDat, i, (int)(spi_file_head_t.file_size + 8)); streamWriter.Close(); System.Console.WriteLine("Extracted UI:" + text); } ImageNum++; } } else { System.Console.WriteLine("The file doesn't contain multiple UIs!"); } } else { System.Console.WriteLine("Invalid UI file!"); return(ImageNum); } return(ImageNum); }