Esempio n. 1
0
    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);
    }
Esempio n. 2
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);
        }
    }
Esempio n. 3
0
    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);
    }
Esempio n. 4
0
    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);
    }
Esempio n. 5
0
    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);
    }