Skip to content

Commit 69d08b6

Browse files
authored
Merge pull request #65 from IndacoSub/save-texture-images
Add an option to save texture images as PNG
2 parents 78b68fd + cc33868 commit 69d08b6

3 files changed

Lines changed: 54 additions & 0 deletions

File tree

AssetsView/Winforms/StartScreen.Designer.cs

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

AssetsView/Winforms/StartScreen.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,11 +407,13 @@ private void AssetList_CellMouseDown(object sender, DataGridViewCellMouseEventAr
407407
if (typeName == "Folder")
408408
{
409409
viewTextureToolStripMenuItem.Visible = false;
410+
exportTextureToolStripMenuItem.Visible = false;
410411
}
411412
else
412413
{
413414
AssetFileInfoEx info = currentFile.table.GetAssetInfo((long)selRow.Cells[3].Value);
414415
viewTextureToolStripMenuItem.Visible = info.curFileType == 0x1C;
416+
exportTextureToolStripMenuItem.Visible = info.curFileType == 0x1C;
415417
}
416418

417419
Point p = dgv.PointToClient(Cursor.Position);
@@ -455,6 +457,21 @@ private void PropertiesToolStripMenuItem_Click(object sender, EventArgs e)
455457
}
456458
}
457459

460+
private void exportTextureToolStripMenuItem_Click(object sender, EventArgs e)
461+
{
462+
if (currentFile == null)
463+
return;
464+
if (assetList.SelectedCells.Count > 0)
465+
{
466+
var selRow = assetList.SelectedRows[0];
467+
AssetFileInfoEx info = currentFile.table.GetAssetInfo((long)selRow.Cells[3].Value);
468+
AssetTypeValueField baseField = helper.GetTypeInstance(currentFile.file, info).GetBaseField();
469+
470+
TextureViewer texView = new TextureViewer(currentFile, baseField);
471+
texView.SaveTexture();
472+
}
473+
}
474+
458475
private void viewTextureToolStripMenuItem_Click(object sender, EventArgs e)
459476
{
460477
if (currentFile == null)

AssetsView/Winforms/TextureViewer.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public partial class TextureViewer : Form
1414
{
1515
Bitmap image;
1616

17+
string loadedFileName;
1718
bool loaded;
1819
float x, y;
1920
int width, height;
@@ -66,6 +67,7 @@ public TextureViewer(AssetsFileInstance inst, AssetTypeValueField baseField)
6667
{
6768
string fmtName = ((TextureFormat)tf.m_TextureFormat).ToString().Replace("_", " ");
6869
Text = $"Texture Viewer [{fmtName}]";
70+
loadedFileName = tf.m_Name;
6971

7072
image = new Bitmap(tf.m_Width, tf.m_Height, PixelFormat.Format32bppArgb);
7173

@@ -124,6 +126,30 @@ private void TextureViewer_FormClosed(object sender, FormClosedEventArgs e)
124126
}
125127
}
126128

129+
public void SaveTexture()
130+
{
131+
if(image == null)
132+
{
133+
return;
134+
}
135+
SaveFileDialog texSaveDialog = new SaveFileDialog();
136+
texSaveDialog.Filter = ".PNG File|*.png";
137+
texSaveDialog.Title = "Save texture as .PNG file";
138+
texSaveDialog.FileName = loadedFileName;
139+
DialogResult res = texSaveDialog.ShowDialog();
140+
string selectedName = texSaveDialog.FileName;
141+
if (res == DialogResult.Cancel || res == DialogResult.No || string.IsNullOrWhiteSpace(selectedName))
142+
{
143+
return;
144+
}
145+
if (File.Exists(selectedName))
146+
{
147+
File.Delete(selectedName);
148+
}
149+
image.Save(selectedName, ImageFormat.Png);
150+
MessageBox.Show("Done!");
151+
}
152+
127153
private void TextureViewer_Paint(object sender, PaintEventArgs e)
128154
{
129155
Graphics g = e.Graphics;

0 commit comments

Comments
 (0)