Example #1
0
        public MemoryStream ExportToStream(int tfc, string cachepath)
        {
            MemoryStream m = new MemoryStream();

            if (tfc < 0 || tfc >= TextureTFCs.Count)
            {
                return(m);
            }
            if (TextureTFCs[tfc].InCache && cachepath != "")
            {
                TFCFile TFCf = new TFCFile(cachepath);
                if (TFCf.CheckTFC(TextureTFCs[tfc].offset))
                {
                    ImageF = new ImageFile(TFCf.getRawTFCComp(TextureTFCs[tfc].offset), T2D.PixelFormat, TextureTFCs[tfc].sizeX, TextureTFCs[tfc].sizeY);
                }
                else
                {
                    return(m);
                }
            }
            else
            {
                if (ImageF != null)
                {
                    m = ImageF.ExportToStream();
                }
                return(m);
            }
            if (!TextureTFCs[tfc].InCache)
            {
                int    SizeX  = TextureTFCs[tfc].sizeX;
                int    SizeY  = TextureTFCs[tfc].sizeY;
                int    Size   = (int)TextureTFCs[tfc].size;
                int    Offset = (int)TextureTFCs[tfc].offset;
                byte[] buff   = new byte[Size];
                for (int i = 0; i < Size; i++)
                {
                    buff[i] = memory[Offset + i];
                }
                ImageF = new ImageFile(buff, T2D.PixelFormat, SizeX, SizeY);
            }
            if (T2D.PixelFormat == "PF_DXT1\0" ||
                T2D.PixelFormat == "PF_DXT5\0" ||
                T2D.PixelFormat == "PF_A8R8G8B8\0" ||
                T2D.PixelFormat == "PF_G8\0" ||
                T2D.PixelFormat == "PF_V8U8\0")
            {
                m = ImageF.ExportToStream();
            }
            return(m);
        }
Example #2
0
 public void ExportToFile(int tfc, string path = "", string cachepath = "")
 {
     if (tfc < 0 || tfc >= TextureTFCs.Count)
     {
         return;
     }
     if (TextureTFCs[tfc].InCache == true)
     {
         TFCFile TFCf = new TFCFile(cachepath);
         if (TFCf.CheckTFC(TextureTFCs[tfc].offset))
         {
             ImageF = new ImageFile(TFCf.getRawTFCComp(TextureTFCs[tfc].offset), T2D.PixelFormat, TextureTFCs[tfc].sizeX, TextureTFCs[tfc].sizeY);
         }
         else
         {
             return;
         }
     }
     else
     {
         int    SizeX  = TextureTFCs[tfc].sizeX;
         int    SizeY  = TextureTFCs[tfc].sizeY;
         int    Size   = (int)TextureTFCs[tfc].size;
         int    Offset = (int)TextureTFCs[tfc].offset;
         byte[] buff   = new byte[Size];
         for (int i = 0; i < Size; i++)
         {
             buff[i] = memory[Offset + i];
         }
         ImageF = new ImageFile(buff, T2D.PixelFormat, SizeX, SizeY);
     }
     if (T2D.PixelFormat == "PF_DXT1\0" ||
         T2D.PixelFormat == "PF_DXT5\0" ||
         T2D.PixelFormat == "PF_A8R8G8B8\0" ||
         T2D.PixelFormat == "PF_G8\0" ||
         T2D.PixelFormat == "PF_V8U8\0")
     {
         ImageF.ExportToFile(path);
     }
 }
Example #3
0
 public void ImportFromFile(int tfc)
 {
     OpenFileDialog Dialog = new OpenFileDialog();
     if (T2D.PixelFormat == "PF_DXT1\0" ||
         T2D.PixelFormat == "PF_DXT5\0")
         Dialog.Filter = "DDS Files (*.dds)|*.dds";
     if (T2D.PixelFormat == "PF_G8\0" ||
         T2D.PixelFormat == "PF_V8U8\0" ||
         T2D.PixelFormat == "PF_A8R8G8B8\0")
         Dialog.Filter = "TGA Files (*.tga)|*.tga";
     int format = -1;
     if (T2D.PixelFormat == "PF_DXT1\0")
         format = 0;
     if (T2D.PixelFormat == "PF_DXT5\0")
         format = 1;
     if (T2D.PixelFormat == "PF_V8U8\0")
         format = 2;
     if (T2D.PixelFormat == "PF_A8R8G8B8\0")
         format = 3;
     if (T2D.PixelFormat == "PF_G8\0")
         format = 4;
     if (!TextureTFCs[tfc].InCache)
     {
         if (Dialog.ShowDialog() == DialogResult.OK)
         {
             if (format == 0 || format == 1)
             {
                 ImageFile t = new ImageFile();
                 t.ImportFromFile(Dialog.FileName);
                 if (t.ImageSizeX == TextureTFCs[tfc].sizeX &&
                     t.ImageSizeY == TextureTFCs[tfc].sizeY &&
                     t.ImageFormat == format &&
                     t.memsize == TextureTFCs[tfc].size)
                 {
                     for (int i = 0; i < t.memsize; i++)
                         memory[TextureTFCs[tfc].offset + i] = t.memory[i];
                     MessageBox.Show("Done.");
                 }
             }
             if (format > 1 && format < 5)
             {
                 ImageFile t = new ImageFile();
                 t.ImportFromFile(Dialog.FileName);
                 if (t.ImageSizeX == TextureTFCs[tfc].sizeX &&
                     t.ImageSizeY == TextureTFCs[tfc].sizeY)
                     if (t.ImageBits != 32)
                     {
                         MessageBox.Show("Please use 32 bit Targa image!");
                     }
                     else
                     {
                         switch (format)
                         {
                             case 2:
                                 for (int i = 0; i < t.memsize / 4; i++)
                                 {
                                     memory[TextureTFCs[tfc].offset + i * 2] = t.memory[i * 4];
                                     memory[TextureTFCs[tfc].offset + i * 2 + 1] = t.memory[i * 4 + 2];
                                 }
                                 break;
                             case 3:
                                 for (int i = 0; i < t.memsize; i++)
                                     memory[TextureTFCs[tfc].offset + i] = t.memory[i];
                                 break;
                             case 4:
                                 for (int i = 0; i < t.memsize / 4; i++)
                                     memory[TextureTFCs[tfc].offset + i] = t.memory[i * 4];
                                 break;
                         }
                         MessageBox.Show("Done.");
                     }
             }
         }
     }
     else
         if (Dialog.ShowDialog() == DialogResult.OK)
         {
             ImageFile t = new ImageFile();
             t.ImportFromFile(Dialog.FileName);
             if ((format == 0 || format == 1) && t.ImageFormat == format)
                 if (t.ImageSizeX == TextureTFCs[tfc].sizeX &&
                     t.ImageSizeY == TextureTFCs[tfc].sizeY)
                 {
                     TFCFile TFCf = new TFCFile(T2D.Tsource);
                     byte[] buff;
                     if (TFCf.isTFCCompressed())
                         buff = ZBlock.Compress(t.memory);
                     else
                         buff = t.memory;
                     byte[] buff2 = BitConverter.GetBytes(TFCf.getFileSize());
                     for (int i = 0; i < 4; i++)
                         memory[TextureTFCs[tfc].HeaderOffset + 20 + i] = buff2[i];
                     buff2 = BitConverter.GetBytes(buff.Length);
                     for (int i = 0; i < 4; i++)
                         memory[TextureTFCs[tfc].HeaderOffset + 16 + i] = buff2[i];
                     TFCf.AppendToTFC(buff);
                     int size = TFCf.getFileSize();
                     if (size != -1)
                     {
                         TOCeditor tc = new TOCeditor();
                         if (!tc.UpdateFile(T2D.Tsource + ".tfc", (uint)size))
                             MessageBox.Show("Didn't found Entry");
                         tc.Close();
                     }
                 }
                 else
                 {
                     System.Windows.Forms.DialogResult m = MessageBox.Show("The size doesn't match, import anyway?", "ME3 Explorer", MessageBoxButtons.YesNo);
                     if (m == DialogResult.Yes)
                     {
                         TFCFile TFCf = new TFCFile(T2D.Tsource);
                         byte[] buff;
                         if (TFCf.isTFCCompressed())
                             buff = ZBlock.Compress(t.memory);
                         else
                             buff = t.memory;
                         byte[] buff2 = BitConverter.GetBytes(TFCf.getFileSize());
                         for (int i = 0; i < 4; i++)
                             memory[TextureTFCs[tfc].HeaderOffset + 20 + i] = buff2[i];
                         buff2 = BitConverter.GetBytes(buff.Length);
                         for (int i = 0; i < 4; i++)
                             memory[TextureTFCs[tfc].HeaderOffset + 16 + i] = buff2[i];
                         if (tfc == 0)
                         {
                             buff2 = BitConverter.GetBytes(t.ImageSizeX);
                             for (int i = 0; i < 4; i++)
                                 memory[T2D.offSizeX + i] = buff2[i];
                             buff2 = BitConverter.GetBytes(t.ImageSizeY);
                             for (int i = 0; i < 4; i++)
                                 memory[T2D.offSizeY + i] = buff2[i];
                         }
                         else
                         {
                             buff2 = BitConverter.GetBytes(t.ImageSizeX * 2);
                             for (int i = 0; i < 4; i++)
                                 memory[TextureTFCs[tfc].HeaderOffset + i] = buff2[i];
                             buff2 = BitConverter.GetBytes(t.ImageSizeY * 2);
                             for (int i = 0; i < 4; i++)
                                 memory[TextureTFCs[tfc].HeaderOffset + 4 + i] = buff2[i];
                             TFCf.AppendToTFC(buff);
                         }
                         TFCf.AppendToTFC(buff);
                         int size = TFCf.getFileSize();
                         if (size != -1)
                         {
                             TOCeditor tc = new TOCeditor();
                             if (!tc.UpdateFile(T2D.Tsource + ".tfc", (uint)size))
                                 MessageBox.Show("Didn't found Entry");
                             tc.Close();
                         }
                     }
                 }
             if (format > 1 && format < 5)
             {
                 if (t.ImageSizeX == TextureTFCs[tfc].sizeX &&
                     t.ImageSizeY == TextureTFCs[tfc].sizeY)
                     if (t.ImageBits != 32)
                     {
                         MessageBox.Show("Please use 32 bit Targa image!");
                     }
                     else
                     {
                         byte[] buf = new byte[0];
                         switch (format)
                         {
                             case 2:
                                 buf = new byte[t.memsize / 2];
                                 for (int i = 0; i < t.memsize / 4; i++)
                                 {
                                     buf[i * 2] = t.memory[i * 4];
                                     buf[i * 2 + 1] = t.memory[i * 4 + 2];
                                 }
                                 break;
                             case 3:
                                 buf = t.memory;
                                 break;
                             case 4:
                                 buf = new byte[t.memsize / 4];
                                 for (int i = 0; i < t.memsize / 4; i++)
                                     buf[i] = t.memory[i * 4];
                                 break;
                         }
                         TFCFile TFCf = new TFCFile(T2D.Tsource);
                         byte[] buff;
                         if (TFCf.isTFCCompressed())
                             buff = ZBlock.Compress(t.memory);
                         else
                             buff = t.memory;
                         byte[] buff2 = BitConverter.GetBytes(TFCf.getFileSize());
                         for (int i = 0; i < 4; i++)
                             memory[TextureTFCs[tfc].HeaderOffset + 20 + i] = buff2[i];
                         buff2 = BitConverter.GetBytes(buff.Length);
                         for (int i = 0; i < 4; i++)
                             memory[TextureTFCs[tfc].HeaderOffset + 12 + i] = buff2[i];
                         TFCf.AppendToTFC(buff);
                         int size = TFCf.getFileSize();
                         if (size != -1)
                         {
                             TOCeditor tc = new TOCeditor();
                             if (!tc.UpdateFile(T2D.Tsource + ".tfc", (uint)size))
                                 MessageBox.Show("Didn't found Entry");
                             tc.Close();
                         }
                         MessageBox.Show("Done.");
                     }
             }
         }
 }
Example #4
0
 public MemoryStream ExportToStream(int tfc, string cachepath)
 {
     MemoryStream m = new MemoryStream();
     if (tfc < 0 || tfc >= TextureTFCs.Count)
         return m;
     if (TextureTFCs[tfc].InCache && cachepath != "")
     {
         TFCFile TFCf = new TFCFile(cachepath);
         if (TFCf.CheckTFC(TextureTFCs[tfc].offset))
             ImageF = new ImageFile(TFCf.getRawTFCComp(TextureTFCs[tfc].offset), T2D.PixelFormat, TextureTFCs[tfc].sizeX, TextureTFCs[tfc].sizeY);
         else
             return m;
     }
     else
     {
         if (ImageF != null)
             m = ImageF.ExportToStream();
         return m;
     }
     if (!TextureTFCs[tfc].InCache)
     {
         int SizeX = TextureTFCs[tfc].sizeX;
         int SizeY = TextureTFCs[tfc].sizeY;
         int Size = (int)TextureTFCs[tfc].size;
         int Offset = (int)TextureTFCs[tfc].offset;
         byte[] buff = new byte[Size];
         for (int i = 0; i < Size; i++)
             buff[i] = memory[Offset + i];
         ImageF = new ImageFile(buff, T2D.PixelFormat, SizeX, SizeY);
     }
     if (T2D.PixelFormat == "PF_DXT1\0" ||
         T2D.PixelFormat == "PF_DXT5\0" ||
         T2D.PixelFormat == "PF_A8R8G8B8\0" ||
         T2D.PixelFormat == "PF_G8\0" ||
         T2D.PixelFormat == "PF_V8U8\0")
         m = ImageF.ExportToStream();
     return m;
 }
Example #5
0
 public void ExportToFile(int tfc, string path = "", string cachepath = "")
 {
     if (tfc < 0 || tfc >= TextureTFCs.Count)
         return;
     if (TextureTFCs[tfc].InCache == true)
     {
         TFCFile TFCf = new TFCFile(cachepath);
         if (TFCf.CheckTFC(TextureTFCs[tfc].offset))
         {
             ImageF = new ImageFile(TFCf.getRawTFCComp(TextureTFCs[tfc].offset), T2D.PixelFormat, TextureTFCs[tfc].sizeX, TextureTFCs[tfc].sizeY);
         }
         else
             return;
     }
     else
     {
         int SizeX = TextureTFCs[tfc].sizeX;
         int SizeY = TextureTFCs[tfc].sizeY;
         int Size = (int)TextureTFCs[tfc].size;
         int Offset = (int)TextureTFCs[tfc].offset;
         byte[] buff = new byte[Size];
         for (int i = 0; i < Size; i++)
             buff[i] = memory[Offset + i];
         ImageF = new ImageFile(buff, T2D.PixelFormat, SizeX, SizeY);
     }
     if (T2D.PixelFormat == "PF_DXT1\0" ||
         T2D.PixelFormat == "PF_DXT5\0" ||
         T2D.PixelFormat == "PF_A8R8G8B8\0" ||
         T2D.PixelFormat == "PF_G8\0" ||
         T2D.PixelFormat == "PF_V8U8\0")
         ImageF.ExportToFile(path);
 }
Example #6
0
        public void ImportFromFile(int tfc)
        {
            OpenFileDialog Dialog = new OpenFileDialog();

            if (T2D.PixelFormat == "PF_DXT1\0" ||
                T2D.PixelFormat == "PF_DXT5\0")
            {
                Dialog.Filter = "DDS Files (*.dds)|*.dds";
            }
            if (T2D.PixelFormat == "PF_G8\0" ||
                T2D.PixelFormat == "PF_V8U8\0" ||
                T2D.PixelFormat == "PF_A8R8G8B8\0")
            {
                Dialog.Filter = "TGA Files (*.tga)|*.tga";
            }
            int format = -1;

            if (T2D.PixelFormat == "PF_DXT1\0")
            {
                format = 0;
            }
            if (T2D.PixelFormat == "PF_DXT5\0")
            {
                format = 1;
            }
            if (T2D.PixelFormat == "PF_V8U8\0")
            {
                format = 2;
            }
            if (T2D.PixelFormat == "PF_A8R8G8B8\0")
            {
                format = 3;
            }
            if (T2D.PixelFormat == "PF_G8\0")
            {
                format = 4;
            }
            if (!TextureTFCs[tfc].InCache)
            {
                if (Dialog.ShowDialog() == DialogResult.OK)
                {
                    if (format == 0 || format == 1)
                    {
                        ImageFile t = new ImageFile();
                        t.ImportFromFile(Dialog.FileName);
                        if (t.ImageSizeX == TextureTFCs[tfc].sizeX &&
                            t.ImageSizeY == TextureTFCs[tfc].sizeY &&
                            t.ImageFormat == format &&
                            t.memsize == TextureTFCs[tfc].size)
                        {
                            for (int i = 0; i < t.memsize; i++)
                            {
                                memory[TextureTFCs[tfc].offset + i] = t.memory[i];
                            }
                            MessageBox.Show("Done.");
                        }
                    }
                    if (format > 1 && format < 5)
                    {
                        ImageFile t = new ImageFile();
                        t.ImportFromFile(Dialog.FileName);
                        if (t.ImageSizeX == TextureTFCs[tfc].sizeX &&
                            t.ImageSizeY == TextureTFCs[tfc].sizeY)
                        {
                            if (t.ImageBits != 32)
                            {
                                MessageBox.Show("Please use 32 bit Targa image!");
                            }
                            else
                            {
                                switch (format)
                                {
                                case 2:
                                    for (int i = 0; i < t.memsize / 4; i++)
                                    {
                                        memory[TextureTFCs[tfc].offset + i * 2]     = t.memory[i * 4];
                                        memory[TextureTFCs[tfc].offset + i * 2 + 1] = t.memory[i * 4 + 2];
                                    }
                                    break;

                                case 3:
                                    for (int i = 0; i < t.memsize; i++)
                                    {
                                        memory[TextureTFCs[tfc].offset + i] = t.memory[i];
                                    }
                                    break;

                                case 4:
                                    for (int i = 0; i < t.memsize / 4; i++)
                                    {
                                        memory[TextureTFCs[tfc].offset + i] = t.memory[i * 4];
                                    }
                                    break;
                                }
                                MessageBox.Show("Done.");
                            }
                        }
                    }
                }
            }
            else
            if (Dialog.ShowDialog() == DialogResult.OK)
            {
                ImageFile t = new ImageFile();
                t.ImportFromFile(Dialog.FileName);
                if ((format == 0 || format == 1) && t.ImageFormat == format)
                {
                    if (t.ImageSizeX == TextureTFCs[tfc].sizeX &&
                        t.ImageSizeY == TextureTFCs[tfc].sizeY)
                    {
                        TFCFile TFCf = new TFCFile(T2D.Tsource);
                        byte[]  buff;
                        if (TFCf.isTFCCompressed())
                        {
                            buff = ZBlock.Compress(t.memory);
                        }
                        else
                        {
                            buff = t.memory;
                        }
                        byte[] buff2 = BitConverter.GetBytes(TFCf.getFileSize());
                        for (int i = 0; i < 4; i++)
                        {
                            memory[TextureTFCs[tfc].HeaderOffset + 20 + i] = buff2[i];
                        }
                        buff2 = BitConverter.GetBytes(buff.Length);
                        for (int i = 0; i < 4; i++)
                        {
                            memory[TextureTFCs[tfc].HeaderOffset + 16 + i] = buff2[i];
                        }
                        TFCf.AppendToTFC(buff);
                        int size = TFCf.getFileSize();
                        if (size != -1)
                        {
                            TOCeditor tc = new TOCeditor();
                            if (!tc.UpdateFile(T2D.Tsource + ".tfc", (uint)size))
                            {
                                MessageBox.Show("Didn't found Entry");
                            }
                            tc.Close();
                        }
                    }
                    else
                    {
                        System.Windows.Forms.DialogResult m = MessageBox.Show("The size doesn't match, import anyway?", "ME3 Explorer", MessageBoxButtons.YesNo);
                        if (m == DialogResult.Yes)
                        {
                            TFCFile TFCf = new TFCFile(T2D.Tsource);
                            byte[]  buff;
                            if (TFCf.isTFCCompressed())
                            {
                                buff = ZBlock.Compress(t.memory);
                            }
                            else
                            {
                                buff = t.memory;
                            }
                            byte[] buff2 = BitConverter.GetBytes(TFCf.getFileSize());
                            for (int i = 0; i < 4; i++)
                            {
                                memory[TextureTFCs[tfc].HeaderOffset + 20 + i] = buff2[i];
                            }
                            buff2 = BitConverter.GetBytes(buff.Length);
                            for (int i = 0; i < 4; i++)
                            {
                                memory[TextureTFCs[tfc].HeaderOffset + 16 + i] = buff2[i];
                            }
                            if (tfc == 0)
                            {
                                buff2 = BitConverter.GetBytes(t.ImageSizeX);
                                for (int i = 0; i < 4; i++)
                                {
                                    memory[T2D.offSizeX + i] = buff2[i];
                                }
                                buff2 = BitConverter.GetBytes(t.ImageSizeY);
                                for (int i = 0; i < 4; i++)
                                {
                                    memory[T2D.offSizeY + i] = buff2[i];
                                }
                            }
                            else
                            {
                                buff2 = BitConverter.GetBytes(t.ImageSizeX * 2);
                                for (int i = 0; i < 4; i++)
                                {
                                    memory[TextureTFCs[tfc].HeaderOffset + i] = buff2[i];
                                }
                                buff2 = BitConverter.GetBytes(t.ImageSizeY * 2);
                                for (int i = 0; i < 4; i++)
                                {
                                    memory[TextureTFCs[tfc].HeaderOffset + 4 + i] = buff2[i];
                                }
                                TFCf.AppendToTFC(buff);
                            }
                            TFCf.AppendToTFC(buff);
                            int size = TFCf.getFileSize();
                            if (size != -1)
                            {
                                TOCeditor tc = new TOCeditor();
                                if (!tc.UpdateFile(T2D.Tsource + ".tfc", (uint)size))
                                {
                                    MessageBox.Show("Didn't found Entry");
                                }
                                tc.Close();
                            }
                        }
                    }
                }
                if (format > 1 && format < 5)
                {
                    if (t.ImageSizeX == TextureTFCs[tfc].sizeX &&
                        t.ImageSizeY == TextureTFCs[tfc].sizeY)
                    {
                        if (t.ImageBits != 32)
                        {
                            MessageBox.Show("Please use 32 bit Targa image!");
                        }
                        else
                        {
                            byte[] buf = new byte[0];
                            switch (format)
                            {
                            case 2:
                                buf = new byte[t.memsize / 2];
                                for (int i = 0; i < t.memsize / 4; i++)
                                {
                                    buf[i * 2]     = t.memory[i * 4];
                                    buf[i * 2 + 1] = t.memory[i * 4 + 2];
                                }
                                break;

                            case 3:
                                buf = t.memory;
                                break;

                            case 4:
                                buf = new byte[t.memsize / 4];
                                for (int i = 0; i < t.memsize / 4; i++)
                                {
                                    buf[i] = t.memory[i * 4];
                                }
                                break;
                            }
                            TFCFile TFCf = new TFCFile(T2D.Tsource);
                            byte[]  buff;
                            if (TFCf.isTFCCompressed())
                            {
                                buff = ZBlock.Compress(t.memory);
                            }
                            else
                            {
                                buff = t.memory;
                            }
                            byte[] buff2 = BitConverter.GetBytes(TFCf.getFileSize());
                            for (int i = 0; i < 4; i++)
                            {
                                memory[TextureTFCs[tfc].HeaderOffset + 20 + i] = buff2[i];
                            }
                            buff2 = BitConverter.GetBytes(buff.Length);
                            for (int i = 0; i < 4; i++)
                            {
                                memory[TextureTFCs[tfc].HeaderOffset + 12 + i] = buff2[i];
                            }
                            TFCf.AppendToTFC(buff);
                            int size = TFCf.getFileSize();
                            if (size != -1)
                            {
                                TOCeditor tc = new TOCeditor();
                                if (!tc.UpdateFile(T2D.Tsource + ".tfc", (uint)size))
                                {
                                    MessageBox.Show("Didn't found Entry");
                                }
                                tc.Close();
                            }
                            MessageBox.Show("Done.");
                        }
                    }
                }
            }
        }