public int ExtractMask(string InFile) { StreamReader streamReader; try { streamReader = new StreamReader(InFile); } catch (Exception) { System.Console.WriteLine("Unable to open LCD mask file:" + InFile); return(-1); } string directoryName = AppDomain.CurrentDomain.BaseDirectory; //Path.GetDirectoryName(InFile); string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(InFile); Path.GetExtension(InFile); string text2 = directoryName + fileNameWithoutExtension + ".bmp"; 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 | 0x1F)) { byte[] array6 = new byte[spi_file_head_t.file_size]; Buffer.BlockCopy(fileDat, Marshal.SizeOf((object)spi_file_head_t), array6, 0, (int)spi_file_head_t.file_size); if (!GetDataPicture(26, 43, array6, text2)) { return(-1); } } else { System.Console.WriteLine("Invalid LCD mask file!"); return(-1); } return(0); }
public int GenerateMask(string SourceFile) { int num = 26; //Photon LCD mask width int num2 = 43; //Photon LCD mask height byte[] array = new byte[num * num2 * 2]; spi_file_head_t spi_file_head_t = default(spi_file_head_t); spi_file_head_t.magic_num = (SPI_FILE_MAGIC_BASE | 0x1F); int num3 = generatePicDat(num, num2, SourceFile, array); if (num3 > 0) { spi_file_head_t.file_size = (uint)num3; string directoryName = AppDomain.CurrentDomain.BaseDirectory; //Path.GetDirectoryName(SourceFile); string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(SourceFile); Path.GetExtension(SourceFile); string text = directoryName + "\\" + fileNameWithoutExtension + ".lcdimg"; StreamWriter streamWriter; try { streamWriter = new StreamWriter(text); } catch (Exception) { System.Console.WriteLine("Unable to generate file:" + text); return(-1); } byte[] array2 = StructToBytes(spi_file_head_t); streamWriter.BaseStream.Write(array2, 0, array2.Length); streamWriter.BaseStream.Write(array, 0, num3); streamWriter.Close(); return(0); } else { return(-1); } }
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 GenerateUI(string SourceFolder, string OutputFile) { int ImageNum = 0; spi_file_head_t spi_file_head_t = default(spi_file_head_t); ui_head_t ui_head_t = default(ui_head_t); //Initial offset is after headers (8+ 357*20) int ImageOffset = Marshal.SizeOf((object)spi_file_head_t) + MaxImages * Marshal.SizeOf((object)ui_head_t); string text = AppDomain.CurrentDomain.BaseDirectory + "\\" + OutputFile; StreamWriter streamWriter; try { streamWriter = new StreamWriter(text); } catch (Exception) { System.Console.WriteLine("Unable to generate output file:" + text); return(-1); } string path = AppDomain.CurrentDomain.BaseDirectory + "\\" + SourceFolder; if (!Directory.Exists(path)) { System.Console.WriteLine("Input folder doesn't exist:" + path); return(-1); } //Read the UItable string text2 = path + "\\UItable.csv"; StreamReader streamReader; try { streamReader = new StreamReader(text2); } catch (Exception) { System.Console.WriteLine("Unable to open UI table file:" + text2); return(-1); } string line; int line_count = 1; Regex parts = new Regex(@"^(\d+)\,(\d+)\,(\d+)\,(\d+)\,(\d+)\,(\d+)\,(\d+)"); line = streamReader.ReadLine(); //Discard first line for (int i = 0; i < MaxImages; i++) { line_count++; if ((line = streamReader.ReadLine()) != null) { Match match = parts.Match(line); if (match.Success) { ui_head_t.ui_magic = uint.Parse(match.Groups[1].Value); //This allows reading CSV files with image ID and files with image magic (previous version) if (ui_head_t.ui_magic != 0) { ui_head_t.ui_magic = (ui_head_t.ui_magic & 0xFFFF) | UI_BMP_MAGIC_BASE; } ui_head_t.offset = int.Parse(match.Groups[2].Value); ui_head_t.x_pos = ushort.Parse(match.Groups[3].Value); ui_head_t.y_pos = ushort.Parse(match.Groups[4].Value); ui_head_t.x_width = ushort.Parse(match.Groups[5].Value); ui_head_t.y_height = ushort.Parse(match.Groups[6].Value); ui_head_t.reserved = uint.Parse(match.Groups[7].Value); header_array[i] = ui_head_t; } else { System.Console.WriteLine("Error in UI table file:" + text2 + "at line {0}", line_count); return(-1); } } else { System.Console.WriteLine("Error in UI table file:" + text2 + "at line {0}", line_count); return(-1); } } //Init output file fileDat = new byte[ImageOffset]; streamWriter.BaseStream.Write(fileDat, 0, ImageOffset); //Export images for (int i = 0; i < MaxImages; i++) { ui_head_t ui_header = header_array[i]; if (ui_header.ui_magic != 0) { string InputFile = AppDomain.CurrentDomain.BaseDirectory + "\\" + SourceFolder + "\\" + i.ToString() + ".bmp"; if (!File.Exists(InputFile)) { System.Console.WriteLine("Image {0} doesn't exist:", i.ToString()); return(-1); } else { byte[] array5 = new byte[ui_header.x_width * ui_header.y_height * 2]; int num4 = generatePicDat(ui_header.x_width, ui_header.y_height, InputFile, array5); if (num4 > 0) { spi_file_head_t.magic_num = (uint)((int)UI_BMP_MAGIC_BASE | i); spi_file_head_t.file_size = (uint)num4; byte[] array6 = new byte[Marshal.SizeOf((object)spi_file_head_t)]; array6 = StructToBytes(spi_file_head_t); streamWriter.BaseStream.Write(array6, 0, array6.Length); streamWriter.BaseStream.Write(array5, 0, num4); header_array[i].offset = ImageOffset; //Update image offset in table ImageOffset += array6.Length + num4; ImageNum++; } } } } //Update headers streamWriter.BaseStream.Position = 0L; spi_file_head_t.magic_num = (SPI_FILE_MAGIC_BASE | 0xC); spi_file_head_t.file_size = (uint)ImageOffset; byte[] array4 = new byte[Marshal.SizeOf((object)spi_file_head_t)]; array4 = StructToBytes(spi_file_head_t); streamWriter.BaseStream.Write(array4, 0, array4.Length); byte[] array7 = new byte[Marshal.SizeOf((object)ui_head_t)]; for (int l = 0; l < MaxImages; l++) { array7 = StructToBytes(header_array[l]); streamWriter.BaseStream.Write(array7, 0, array7.Length); } 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); }