EveryFileExplorer/3DS/UI/TXOBViewer.cs
Gericom f9f00d193c Importing textures for bcmdl is possible now
And some older stuff I didn't commit yet.
2015-11-03 16:18:38 +01:00

91 lines
3.1 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using _3DS.NintendoWare.GFX;
using System.Drawing.Imaging;
using System.IO;
using _3DS.GPU;
namespace _3DS.UI
{
public partial class TXOBViewer : UserControl
{
public ImageTextureCtr Texture;
public TXOBViewer(ImageTextureCtr Texture)
{
this.Texture = Texture;
InitializeComponent();
}
private void TXOBViewer_Load(object sender, EventArgs e)
{
for (int i = 0; i < Texture.NrLevels; i++)
{
toolStripComboBox1.Items.Add(i.ToString());
}
toolStripComboBox1.SelectedIndex = 0;
}
private void toolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
pictureBox1.Image = Texture.GetBitmap(toolStripComboBox1.SelectedIndex);
}
private void toolStripButton2_Click(object sender, EventArgs e)
{
saveFileDialog1.FileName = Texture.Name + ".png";
if (saveFileDialog1.ShowDialog() == DialogResult.OK
&& saveFileDialog1.FileName.Length > 0)
{
pictureBox1.Image.Save(saveFileDialog1.FileName, ImageFormat.Png);
}
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
if (Texture.HWFormat != Textures.ImageFormat.RGBA8 &&
Texture.HWFormat != Textures.ImageFormat.RGB8 &&
Texture.HWFormat != Textures.ImageFormat.RGB565 &&
Texture.HWFormat != Textures.ImageFormat.ETC1 &&
Texture.HWFormat != Textures.ImageFormat.ETC1A4)
{
MessageBox.Show("This texture format is currently not supported for importing.");
return;
}
if (openFileDialog1.ShowDialog() == DialogResult.OK
&& openFileDialog1.FileName.Length > 0)
{
Bitmap b = new Bitmap(new MemoryStream(File.ReadAllBytes(openFileDialog1.FileName)));
if (b.Width != Texture.Width && b.Height != Texture.Height)
{
MessageBox.Show("Make sure the texture is even big as the original texture! (" + Texture.Width + "x" + Texture.Height + ")");
return;
}
for (int i = 0; i < Texture.NrLevels; i++)
{
int l = i;
uint w = Texture.Width;
uint h = Texture.Height;
int bpp = Textures.GetBpp(Texture.HWFormat);
int offset = 0;
while (l > 0)
{
offset += (int)(w * h * bpp / 8);
w /= 2;
h /= 2;
l--;
}
byte[] result = Textures.FromBitmap(new Bitmap(b, (int)w, (int)h), Texture.HWFormat);
Array.Copy(result, 0, Texture.TextureImage.Data, offset, result.Length);
}
pictureBox1.Image = Texture.GetBitmap(toolStripComboBox1.SelectedIndex);
}
}
}
}