More image editor improvements
Array textures can be exported to DDS. Specific channels can be edited. Uncompressed formats for dds greatly improved. Array textures can be exported from non dds formats as multiple images.
This commit is contained in:
parent
55702ff401
commit
f2439f2fdc
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -270,8 +270,10 @@
|
|||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(1096, 560);
|
this.ClientSize = new System.Drawing.Size(1096, 560);
|
||||||
|
this.KeyPreview = true;
|
||||||
this.Text = "Texture Importer";
|
this.Text = "Texture Importer";
|
||||||
this.Load += new System.EventHandler(this.BinaryTextureImporterList_Load);
|
this.Load += new System.EventHandler(this.BinaryTextureImporterList_Load);
|
||||||
|
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.BinaryTextureImporterList_KeyDown);
|
||||||
this.contentContainer.ResumeLayout(false);
|
this.contentContainer.ResumeLayout(false);
|
||||||
this.contentContainer.PerformLayout();
|
this.contentContainer.PerformLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.SwizzleNum)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.SwizzleNum)).EndInit();
|
||||||
|
@ -88,6 +88,8 @@ namespace FirstPlugin
|
|||||||
ImgDimComb.SelectedIndex = 1;
|
ImgDimComb.SelectedIndex = 1;
|
||||||
tileModeCB.SelectedIndex = 0;
|
tileModeCB.SelectedIndex = 0;
|
||||||
formatComboBox.SelectedItem = SurfaceFormat.BC1_SRGB;
|
formatComboBox.SelectedItem = SurfaceFormat.BC1_SRGB;
|
||||||
|
|
||||||
|
button1.Select();
|
||||||
}
|
}
|
||||||
TextureImporterSettings SelectedTexSettings;
|
TextureImporterSettings SelectedTexSettings;
|
||||||
|
|
||||||
@ -226,5 +228,18 @@ namespace FirstPlugin
|
|||||||
else
|
else
|
||||||
SelectedTexSettings.MipCount = 1;
|
SelectedTexSettings.MipCount = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void BinaryTextureImporterList_KeyDown(object sender, KeyEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.KeyCode == Keys.Enter)
|
||||||
|
{
|
||||||
|
if (button1.Enabled)
|
||||||
|
{
|
||||||
|
DialogResult = DialogResult.OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,6 @@ namespace FirstPlugin
|
|||||||
}
|
}
|
||||||
|
|
||||||
public string TexName;
|
public string TexName;
|
||||||
public uint arrayLength = 1;
|
|
||||||
public uint AccessFlags = 0x20;
|
public uint AccessFlags = 0x20;
|
||||||
public uint MipCount;
|
public uint MipCount;
|
||||||
public uint Depth = 1;
|
public uint Depth = 1;
|
||||||
@ -68,16 +67,11 @@ namespace FirstPlugin
|
|||||||
MipCount = dds.header.mipmapCount;
|
MipCount = dds.header.mipmapCount;
|
||||||
TexWidth = dds.header.width;
|
TexWidth = dds.header.width;
|
||||||
TexHeight = dds.header.height;
|
TexHeight = dds.header.height;
|
||||||
arrayLength = 1;
|
|
||||||
if (dds.header.caps2 == (uint)DDS.DDSCAPS2.CUBEMAP_ALLFACES)
|
|
||||||
{
|
|
||||||
arrayLength = 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var array in DDS.GetArrayFacesBytes(dds.bdata, (int)arrayLength))
|
var surfaces = DDS.GetArrayFaces(dds, dds.bdata, dds.ArrayCount);
|
||||||
{
|
|
||||||
DataBlockOutput.Add(array);
|
foreach (var surface in surfaces)
|
||||||
}
|
DataBlockOutput.Add(Utils.CombineByteArray(surface.mipmaps.ToArray()));
|
||||||
|
|
||||||
Format = TextureData.GenericToBntxSurfaceFormat(dds.Format);
|
Format = TextureData.GenericToBntxSurfaceFormat(dds.Format);
|
||||||
}
|
}
|
||||||
@ -234,7 +228,6 @@ namespace FirstPlugin
|
|||||||
tex.sparseBinding = settings.sparseBinding;
|
tex.sparseBinding = settings.sparseBinding;
|
||||||
tex.sparseResidency = settings.sparseResidency;
|
tex.sparseResidency = settings.sparseResidency;
|
||||||
tex.AccessFlags = settings.AccessFlags;
|
tex.AccessFlags = settings.AccessFlags;
|
||||||
tex.ArrayLength = settings.arrayLength;
|
|
||||||
tex.MipCount = settings.MipCount;
|
tex.MipCount = settings.MipCount;
|
||||||
tex.Depth = settings.Depth;
|
tex.Depth = settings.Depth;
|
||||||
tex.Dim = settings.Dim;
|
tex.Dim = settings.Dim;
|
||||||
|
@ -136,7 +136,7 @@ namespace FirstPlugin
|
|||||||
|
|
||||||
// Formats.Add(typeof(NCA));
|
// Formats.Add(typeof(NCA));
|
||||||
// Formats.Add(typeof(XCI));
|
// Formats.Add(typeof(XCI));
|
||||||
// Formats.Add(typeof(NSP));
|
Formats.Add(typeof(NSP));
|
||||||
Formats.Add(typeof(BFSAR));
|
Formats.Add(typeof(BFSAR));
|
||||||
Formats.Add(typeof(BNSH));
|
Formats.Add(typeof(BNSH));
|
||||||
Formats.Add(typeof(BFSHA));
|
Formats.Add(typeof(BFSHA));
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -490,6 +490,13 @@ namespace Switch_Toolbox.Library
|
|||||||
header.caps4 = reader.ReadUInt32();
|
header.caps4 = reader.ReadUInt32();
|
||||||
header.reserved2 = reader.ReadUInt32();
|
header.reserved2 = reader.ReadUInt32();
|
||||||
|
|
||||||
|
ArrayCount = 1;
|
||||||
|
|
||||||
|
if (header.caps2 == (uint)DDS.DDSCAPS2.CUBEMAP_ALLFACES)
|
||||||
|
{
|
||||||
|
ArrayCount = 6;
|
||||||
|
}
|
||||||
|
|
||||||
int DX10HeaderSize = 0;
|
int DX10HeaderSize = 0;
|
||||||
if (header.ddspf.fourCC == FOURCC_DX10)
|
if (header.ddspf.fourCC == FOURCC_DX10)
|
||||||
{
|
{
|
||||||
@ -537,7 +544,6 @@ namespace Switch_Toolbox.Library
|
|||||||
reader.Close();
|
reader.Close();
|
||||||
|
|
||||||
|
|
||||||
ArrayCount = 1;
|
|
||||||
MipCount = header.mipmapCount;
|
MipCount = header.mipmapCount;
|
||||||
Width = header.width;
|
Width = header.width;
|
||||||
Height = header.height;
|
Height = header.height;
|
||||||
@ -587,7 +593,7 @@ namespace Switch_Toolbox.Library
|
|||||||
{
|
{
|
||||||
if (RedMask == R8G8B8_MASKS[0] && GreenMask == R8G8B8_MASKS[1] && BlueMask == R8G8B8_MASKS[2] && AlphaMask == R8G8B8_MASKS[3])
|
if (RedMask == R8G8B8_MASKS[0] && GreenMask == R8G8B8_MASKS[1] && BlueMask == R8G8B8_MASKS[2] && AlphaMask == R8G8B8_MASKS[3])
|
||||||
{
|
{
|
||||||
return TEX_FORMAT.R8G8_B8G8_UNORM;
|
return TEX_FORMAT.R8G8B8A8_UNORM;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -602,7 +608,7 @@ namespace Switch_Toolbox.Library
|
|||||||
}
|
}
|
||||||
else if (RedMask == X8B8G8R8_MASKS[0] && GreenMask == X8B8G8R8_MASKS[1] && BlueMask == X8B8G8R8_MASKS[2] && AlphaMask == X8B8G8R8_MASKS[3])
|
else if (RedMask == X8B8G8R8_MASKS[0] && GreenMask == X8B8G8R8_MASKS[1] && BlueMask == X8B8G8R8_MASKS[2] && AlphaMask == X8B8G8R8_MASKS[3])
|
||||||
{
|
{
|
||||||
return TEX_FORMAT.R8G8_B8G8_UNORM;
|
return TEX_FORMAT.B8G8R8X8_UNORM;
|
||||||
}
|
}
|
||||||
else if (RedMask == A8R8G8B8_MASKS[0] && GreenMask == A8R8G8B8_MASKS[1] && BlueMask == A8R8G8B8_MASKS[2] && AlphaMask == A8R8G8B8_MASKS[3])
|
else if (RedMask == A8R8G8B8_MASKS[0] && GreenMask == A8R8G8B8_MASKS[1] && BlueMask == A8R8G8B8_MASKS[2] && AlphaMask == A8R8G8B8_MASKS[3])
|
||||||
{
|
{
|
||||||
@ -610,7 +616,7 @@ namespace Switch_Toolbox.Library
|
|||||||
}
|
}
|
||||||
else if (RedMask == X8R8G8B8_MASKS[0] && GreenMask == X8R8G8B8_MASKS[1] && BlueMask == X8R8G8B8_MASKS[2] && AlphaMask == X8R8G8B8_MASKS[3])
|
else if (RedMask == X8R8G8B8_MASKS[0] && GreenMask == X8R8G8B8_MASKS[1] && BlueMask == X8R8G8B8_MASKS[2] && AlphaMask == X8R8G8B8_MASKS[3])
|
||||||
{
|
{
|
||||||
return TEX_FORMAT.R8G8_B8G8_UNORM;
|
return TEX_FORMAT.B8G8R8X8_UNORM;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -628,6 +634,8 @@ namespace Switch_Toolbox.Library
|
|||||||
DX10header.miscFlag = reader.ReadUInt32();
|
DX10header.miscFlag = reader.ReadUInt32();
|
||||||
DX10header.arrayFlag = reader.ReadUInt32();
|
DX10header.arrayFlag = reader.ReadUInt32();
|
||||||
DX10header.miscFlags2 = reader.ReadUInt32();
|
DX10header.miscFlags2 = reader.ReadUInt32();
|
||||||
|
|
||||||
|
ArrayCount = DX10header.arrayFlag;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Swizzle = false;
|
public bool Swizzle = false;
|
||||||
@ -636,7 +644,7 @@ namespace Switch_Toolbox.Library
|
|||||||
if (Swizzle)
|
if (Swizzle)
|
||||||
return TegraX1Swizzle.GetImageData(this, bdata, ArrayLevel, MipLevel);
|
return TegraX1Swizzle.GetImageData(this, bdata, ArrayLevel, MipLevel);
|
||||||
|
|
||||||
return GetArrayFaces(this, 1)[ArrayLevel].mipmaps[MipLevel];
|
return GetArrayFaces(this, ArrayCount)[ArrayLevel].mipmaps[MipLevel];
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void SetImageData(Bitmap bitmap, int ArrayLevel)
|
public override void SetImageData(Bitmap bitmap, int ArrayLevel)
|
||||||
@ -818,13 +826,25 @@ namespace Switch_Toolbox.Library
|
|||||||
return TEX_FORMAT.R8G8B8A8_UNORM;
|
return TEX_FORMAT.R8G8B8A8_UNORM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void SetFlags(DXGI_FORMAT Format)
|
public void SetFlags(DXGI_FORMAT Format, bool UseDX10 = false)
|
||||||
{
|
{
|
||||||
header.flags = (uint)(DDSD.CAPS | DDSD.HEIGHT | DDSD.WIDTH | DDSD.PIXELFORMAT | DDSD.MIPMAPCOUNT | DDSD.LINEARSIZE);
|
header.flags = (uint)(DDSD.CAPS | DDSD.HEIGHT | DDSD.WIDTH | DDSD.PIXELFORMAT | DDSD.MIPMAPCOUNT | DDSD.LINEARSIZE);
|
||||||
header.caps = (uint)DDSCAPS.TEXTURE;
|
header.caps = (uint)DDSCAPS.TEXTURE;
|
||||||
if (header.mipmapCount > 1)
|
if (header.mipmapCount > 1)
|
||||||
header.caps |= (uint)(DDSCAPS.COMPLEX | DDSCAPS.MIPMAP);
|
header.caps |= (uint)(DDSCAPS.COMPLEX | DDSCAPS.MIPMAP);
|
||||||
|
|
||||||
|
if (UseDX10)
|
||||||
|
{
|
||||||
|
header.ddspf.flags = (uint)DDPF.FOURCC;
|
||||||
|
header.ddspf.fourCC = FOURCC_DX10;
|
||||||
|
if (DX10header == null)
|
||||||
|
DX10header = new DX10Header();
|
||||||
|
|
||||||
|
IsDX10 = true;
|
||||||
|
DX10header.DXGI_Format = Format;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (Format)
|
switch (Format)
|
||||||
{
|
{
|
||||||
case DXGI_FORMAT.DXGI_FORMAT_R8G8B8A8_UNORM:
|
case DXGI_FORMAT.DXGI_FORMAT_R8G8B8A8_UNORM:
|
||||||
|
@ -42,24 +42,25 @@
|
|||||||
//
|
//
|
||||||
// label1
|
// label1
|
||||||
//
|
//
|
||||||
this.label1.AutoSize = true;
|
this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
this.label1.Location = new System.Drawing.Point(114, 9);
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.label1.Location = new System.Drawing.Point(12, 9);
|
||||||
this.label1.Name = "label1";
|
this.label1.Name = "label1";
|
||||||
this.label1.Size = new System.Drawing.Size(79, 13);
|
this.label1.Size = new System.Drawing.Size(287, 13);
|
||||||
this.label1.TabIndex = 1;
|
this.label1.TabIndex = 1;
|
||||||
this.label1.Text = "Loaidng File.....";
|
this.label1.Text = "Loaidng File.....";
|
||||||
|
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||||
//
|
//
|
||||||
// ProgressBar
|
// STProgressBar
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(311, 82);
|
this.ClientSize = new System.Drawing.Size(311, 82);
|
||||||
this.Controls.Add(this.label1);
|
this.Controls.Add(this.label1);
|
||||||
this.Controls.Add(this.progressBar1);
|
this.Controls.Add(this.progressBar1);
|
||||||
this.Name = "ProgressBar";
|
this.Name = "STProgressBar";
|
||||||
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.ProgressBar_FormClosed);
|
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.ProgressBar_FormClosed);
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
this.PerformLayout();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,6 +58,11 @@
|
|||||||
this.fillColorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.fillColorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.undoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.undoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.redoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.redoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.channelsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.replacRedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.replaceGreenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.replaceBlueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.replaceAlphaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.editInExternalProgramToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.editInExternalProgramToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
@ -360,6 +365,7 @@
|
|||||||
this.fillColorToolStripMenuItem,
|
this.fillColorToolStripMenuItem,
|
||||||
this.undoToolStripMenuItem,
|
this.undoToolStripMenuItem,
|
||||||
this.redoToolStripMenuItem,
|
this.redoToolStripMenuItem,
|
||||||
|
this.channelsToolStripMenuItem,
|
||||||
this.editInExternalProgramToolStripMenuItem,
|
this.editInExternalProgramToolStripMenuItem,
|
||||||
this.copyToolStripMenuItem});
|
this.copyToolStripMenuItem});
|
||||||
this.editToolStripMenuItem.Name = "editToolStripMenuItem";
|
this.editToolStripMenuItem.Name = "editToolStripMenuItem";
|
||||||
@ -387,6 +393,45 @@
|
|||||||
this.redoToolStripMenuItem.Text = "Redo";
|
this.redoToolStripMenuItem.Text = "Redo";
|
||||||
this.redoToolStripMenuItem.Click += new System.EventHandler(this.redoToolStripMenuItem_Click);
|
this.redoToolStripMenuItem.Click += new System.EventHandler(this.redoToolStripMenuItem_Click);
|
||||||
//
|
//
|
||||||
|
// channelsToolStripMenuItem
|
||||||
|
//
|
||||||
|
this.channelsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
this.replacRedToolStripMenuItem,
|
||||||
|
this.replaceGreenToolStripMenuItem,
|
||||||
|
this.replaceBlueToolStripMenuItem,
|
||||||
|
this.replaceAlphaToolStripMenuItem});
|
||||||
|
this.channelsToolStripMenuItem.Name = "channelsToolStripMenuItem";
|
||||||
|
this.channelsToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
|
||||||
|
this.channelsToolStripMenuItem.Text = "Channels";
|
||||||
|
//
|
||||||
|
// replacRedToolStripMenuItem
|
||||||
|
//
|
||||||
|
this.replacRedToolStripMenuItem.Name = "replacRedToolStripMenuItem";
|
||||||
|
this.replacRedToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
|
||||||
|
this.replacRedToolStripMenuItem.Text = "Replace Red";
|
||||||
|
this.replacRedToolStripMenuItem.Click += new System.EventHandler(this.replacRedToolStripMenuItem_Click);
|
||||||
|
//
|
||||||
|
// replaceGreenToolStripMenuItem
|
||||||
|
//
|
||||||
|
this.replaceGreenToolStripMenuItem.Name = "replaceGreenToolStripMenuItem";
|
||||||
|
this.replaceGreenToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
|
||||||
|
this.replaceGreenToolStripMenuItem.Text = "Replace Green";
|
||||||
|
this.replaceGreenToolStripMenuItem.Click += new System.EventHandler(this.replaceGreenToolStripMenuItem_Click);
|
||||||
|
//
|
||||||
|
// replaceBlueToolStripMenuItem
|
||||||
|
//
|
||||||
|
this.replaceBlueToolStripMenuItem.Name = "replaceBlueToolStripMenuItem";
|
||||||
|
this.replaceBlueToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
|
||||||
|
this.replaceBlueToolStripMenuItem.Text = "Replace Blue";
|
||||||
|
this.replaceBlueToolStripMenuItem.Click += new System.EventHandler(this.replaceBlueToolStripMenuItem_Click);
|
||||||
|
//
|
||||||
|
// replaceAlphaToolStripMenuItem
|
||||||
|
//
|
||||||
|
this.replaceAlphaToolStripMenuItem.Name = "replaceAlphaToolStripMenuItem";
|
||||||
|
this.replaceAlphaToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
|
||||||
|
this.replaceAlphaToolStripMenuItem.Text = "Replace Alpha";
|
||||||
|
this.replaceAlphaToolStripMenuItem.Click += new System.EventHandler(this.replaceAlphaToolStripMenuItem_Click);
|
||||||
|
//
|
||||||
// editInExternalProgramToolStripMenuItem
|
// editInExternalProgramToolStripMenuItem
|
||||||
//
|
//
|
||||||
this.editInExternalProgramToolStripMenuItem.Name = "editInExternalProgramToolStripMenuItem";
|
this.editInExternalProgramToolStripMenuItem.Name = "editInExternalProgramToolStripMenuItem";
|
||||||
@ -621,5 +666,10 @@
|
|||||||
private STPanel stPanel5;
|
private STPanel stPanel5;
|
||||||
private STLabel bottomLabel;
|
private STLabel bottomLabel;
|
||||||
private System.Windows.Forms.ToolStripMenuItem fillColorToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem fillColorToolStripMenuItem;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem channelsToolStripMenuItem;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem replacRedToolStripMenuItem;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem replaceGreenToolStripMenuItem;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem replaceBlueToolStripMenuItem;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem replaceAlphaToolStripMenuItem;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -333,6 +333,8 @@ namespace Switch_Toolbox.Library.Forms
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Image BaseImage;
|
||||||
|
|
||||||
private void UpdatePictureBox(int ChannelIndex = 0)
|
private void UpdatePictureBox(int ChannelIndex = 0)
|
||||||
{
|
{
|
||||||
if (ActiveTexture == null)
|
if (ActiveTexture == null)
|
||||||
@ -344,6 +346,9 @@ namespace Switch_Toolbox.Library.Forms
|
|||||||
|
|
||||||
var image = ActiveTexture.GetBitmap(CurArrayDisplayLevel, CurMipDisplayLevel);
|
var image = ActiveTexture.GetBitmap(CurArrayDisplayLevel, CurMipDisplayLevel);
|
||||||
|
|
||||||
|
//Keep base image for channel viewer updating/editing
|
||||||
|
BaseImage = new Bitmap(image);
|
||||||
|
|
||||||
if (propertiesEditor.InvokeRequired)
|
if (propertiesEditor.InvokeRequired)
|
||||||
{
|
{
|
||||||
propertiesEditor.Invoke(new MethodInvoker(
|
propertiesEditor.Invoke(new MethodInvoker(
|
||||||
@ -695,6 +700,7 @@ namespace Switch_Toolbox.Library.Forms
|
|||||||
mipLevelCounterLabel.Text = $"Mip Level: {CurMipDisplayLevel} / {TotalMipCount}";
|
mipLevelCounterLabel.Text = $"Mip Level: {CurMipDisplayLevel} / {TotalMipCount}";
|
||||||
|
|
||||||
propertiesEditor.UpdateProperties();
|
propertiesEditor.UpdateProperties();
|
||||||
|
propertiesEditor.LoadImage(new Bitmap(image), this);
|
||||||
|
|
||||||
HasBeenEdited = true;
|
HasBeenEdited = true;
|
||||||
}
|
}
|
||||||
@ -758,6 +764,8 @@ namespace Switch_Toolbox.Library.Forms
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Image GetActiveImage() => pictureBoxCustom1.Image;
|
||||||
|
|
||||||
private void hueToolStripMenuItem_Click(object sender, EventArgs e)
|
private void hueToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (!IsFinished)
|
if (!IsFinished)
|
||||||
@ -990,7 +998,7 @@ namespace Switch_Toolbox.Library.Forms
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SaveAndApplyImage(Bitmap image, bool DecodeBack)
|
public void SaveAndApplyImage(Bitmap image, bool DecodeBack)
|
||||||
{
|
{
|
||||||
if (saveBtn.InvokeRequired)
|
if (saveBtn.InvokeRequired)
|
||||||
{
|
{
|
||||||
@ -1220,5 +1228,21 @@ namespace Switch_Toolbox.Library.Forms
|
|||||||
ApplyEdit(newImage);
|
ApplyEdit(newImage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void replacRedToolStripMenuItem_Click(object sender, EventArgs e) {
|
||||||
|
propertiesEditor.EditChannel(STChannelType.Red);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void replaceGreenToolStripMenuItem_Click(object sender, EventArgs e) {
|
||||||
|
propertiesEditor.EditChannel(STChannelType.Green);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void replaceBlueToolStripMenuItem_Click(object sender, EventArgs e) {
|
||||||
|
propertiesEditor.EditChannel(STChannelType.Blue);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void replaceAlphaToolStripMenuItem_Click(object sender, EventArgs e) {
|
||||||
|
propertiesEditor.EditChannel(STChannelType.Alpha);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -117,6 +117,12 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<metadata name="stContextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>351, 17</value>
|
||||||
|
</metadata>
|
||||||
<metadata name="stContextMenuStrip2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="stContextMenuStrip2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>184, 17</value>
|
<value>184, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
@ -172,9 +178,6 @@
|
|||||||
gg==
|
gg==
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
|
||||||
<value>351, 17</value>
|
|
||||||
</metadata>
|
|
||||||
<data name="editBtn.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="editBtn.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
|
iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
|
||||||
@ -736,9 +739,6 @@
|
|||||||
cL+T0fIXUvho1xJo195FiqmQ0PIqcY9VOy9ppv/4j/8PQJ1wavHnTdQAAAAASUVORK5CYII=
|
cL+T0fIXUvho1xJo195FiqmQ0PIqcY9VOy9ppv/4j/8PQJ1wavHnTdQAAAAASUVORK5CYII=
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="stContextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
|
||||||
<value>17, 17</value>
|
|
||||||
</metadata>
|
|
||||||
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>108</value>
|
<value>108</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
@ -28,15 +28,19 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
|
this.components = new System.ComponentModel.Container();
|
||||||
this.channelListView = new Switch_Toolbox.Library.Forms.ListViewCustom();
|
this.channelListView = new Switch_Toolbox.Library.Forms.ListViewCustom();
|
||||||
this.ChannelsColumn = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
this.ChannelsColumn = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
this.stTabControl1 = new Switch_Toolbox.Library.Forms.STTabControl();
|
this.stTabControl1 = new Switch_Toolbox.Library.Forms.STTabControl();
|
||||||
this.tabPage1 = new System.Windows.Forms.TabPage();
|
|
||||||
this.tabPage2 = new System.Windows.Forms.TabPage();
|
this.tabPage2 = new System.Windows.Forms.TabPage();
|
||||||
this.stPropertyGrid1 = new Switch_Toolbox.Library.Forms.STPropertyGrid();
|
this.stPropertyGrid1 = new Switch_Toolbox.Library.Forms.STPropertyGrid();
|
||||||
|
this.tabPage1 = new System.Windows.Forms.TabPage();
|
||||||
|
this.stChannelToolstripMenu = new Switch_Toolbox.Library.Forms.STContextMenuStrip(this.components);
|
||||||
|
this.replaceChannelToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.stTabControl1.SuspendLayout();
|
this.stTabControl1.SuspendLayout();
|
||||||
this.tabPage1.SuspendLayout();
|
|
||||||
this.tabPage2.SuspendLayout();
|
this.tabPage2.SuspendLayout();
|
||||||
|
this.tabPage1.SuspendLayout();
|
||||||
|
this.stChannelToolstripMenu.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// channelListView
|
// channelListView
|
||||||
@ -53,6 +57,7 @@
|
|||||||
this.channelListView.UseCompatibleStateImageBehavior = false;
|
this.channelListView.UseCompatibleStateImageBehavior = false;
|
||||||
this.channelListView.View = System.Windows.Forms.View.Details;
|
this.channelListView.View = System.Windows.Forms.View.Details;
|
||||||
this.channelListView.SelectedIndexChanged += new System.EventHandler(this.channelListView_SelectedIndexChanged);
|
this.channelListView.SelectedIndexChanged += new System.EventHandler(this.channelListView_SelectedIndexChanged);
|
||||||
|
this.channelListView.MouseClick += new System.Windows.Forms.MouseEventHandler(this.channelListView_MouseClick);
|
||||||
//
|
//
|
||||||
// ChannelsColumn
|
// ChannelsColumn
|
||||||
//
|
//
|
||||||
@ -71,17 +76,6 @@
|
|||||||
this.stTabControl1.Size = new System.Drawing.Size(233, 543);
|
this.stTabControl1.Size = new System.Drawing.Size(233, 543);
|
||||||
this.stTabControl1.TabIndex = 1;
|
this.stTabControl1.TabIndex = 1;
|
||||||
//
|
//
|
||||||
// tabPage1
|
|
||||||
//
|
|
||||||
this.tabPage1.Controls.Add(this.channelListView);
|
|
||||||
this.tabPage1.Location = new System.Drawing.Point(4, 25);
|
|
||||||
this.tabPage1.Name = "tabPage1";
|
|
||||||
this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
|
|
||||||
this.tabPage1.Size = new System.Drawing.Size(225, 514);
|
|
||||||
this.tabPage1.TabIndex = 0;
|
|
||||||
this.tabPage1.Text = "Channels";
|
|
||||||
this.tabPage1.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// tabPage2
|
// tabPage2
|
||||||
//
|
//
|
||||||
this.tabPage2.Controls.Add(this.stPropertyGrid1);
|
this.tabPage2.Controls.Add(this.stPropertyGrid1);
|
||||||
@ -100,9 +94,35 @@
|
|||||||
this.stPropertyGrid1.Dock = System.Windows.Forms.DockStyle.Fill;
|
this.stPropertyGrid1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.stPropertyGrid1.Location = new System.Drawing.Point(3, 3);
|
this.stPropertyGrid1.Location = new System.Drawing.Point(3, 3);
|
||||||
this.stPropertyGrid1.Name = "stPropertyGrid1";
|
this.stPropertyGrid1.Name = "stPropertyGrid1";
|
||||||
|
this.stPropertyGrid1.ShowHintDisplay = true;
|
||||||
this.stPropertyGrid1.Size = new System.Drawing.Size(219, 508);
|
this.stPropertyGrid1.Size = new System.Drawing.Size(219, 508);
|
||||||
this.stPropertyGrid1.TabIndex = 0;
|
this.stPropertyGrid1.TabIndex = 0;
|
||||||
//
|
//
|
||||||
|
// tabPage1
|
||||||
|
//
|
||||||
|
this.tabPage1.Controls.Add(this.channelListView);
|
||||||
|
this.tabPage1.Location = new System.Drawing.Point(4, 25);
|
||||||
|
this.tabPage1.Name = "tabPage1";
|
||||||
|
this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
|
||||||
|
this.tabPage1.Size = new System.Drawing.Size(225, 514);
|
||||||
|
this.tabPage1.TabIndex = 0;
|
||||||
|
this.tabPage1.Text = "Channels";
|
||||||
|
this.tabPage1.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// stChannelToolstripMenu
|
||||||
|
//
|
||||||
|
this.stChannelToolstripMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
this.replaceChannelToolStripMenuItem});
|
||||||
|
this.stChannelToolstripMenu.Name = "stChannelToolstripMenu";
|
||||||
|
this.stChannelToolstripMenu.Size = new System.Drawing.Size(181, 48);
|
||||||
|
//
|
||||||
|
// replaceChannelToolStripMenuItem
|
||||||
|
//
|
||||||
|
this.replaceChannelToolStripMenuItem.Name = "replaceChannelToolStripMenuItem";
|
||||||
|
this.replaceChannelToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
|
||||||
|
this.replaceChannelToolStripMenuItem.Text = "Replace Channel";
|
||||||
|
this.replaceChannelToolStripMenuItem.Click += new System.EventHandler(this.replaceChannelToolStripMenuItem_Click);
|
||||||
|
//
|
||||||
// ImagePropertiesEditor
|
// ImagePropertiesEditor
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
@ -111,8 +131,9 @@
|
|||||||
this.Name = "ImagePropertiesEditor";
|
this.Name = "ImagePropertiesEditor";
|
||||||
this.Size = new System.Drawing.Size(233, 543);
|
this.Size = new System.Drawing.Size(233, 543);
|
||||||
this.stTabControl1.ResumeLayout(false);
|
this.stTabControl1.ResumeLayout(false);
|
||||||
this.tabPage1.ResumeLayout(false);
|
|
||||||
this.tabPage2.ResumeLayout(false);
|
this.tabPage2.ResumeLayout(false);
|
||||||
|
this.tabPage1.ResumeLayout(false);
|
||||||
|
this.stChannelToolstripMenu.ResumeLayout(false);
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -125,5 +146,7 @@
|
|||||||
private System.Windows.Forms.TabPage tabPage2;
|
private System.Windows.Forms.TabPage tabPage2;
|
||||||
private System.Windows.Forms.ColumnHeader ChannelsColumn;
|
private System.Windows.Forms.ColumnHeader ChannelsColumn;
|
||||||
private STPropertyGrid stPropertyGrid1;
|
private STPropertyGrid stPropertyGrid1;
|
||||||
|
private STContextMenuStrip stChannelToolstripMenu;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem replaceChannelToolStripMenuItem;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -222,6 +222,21 @@ namespace Switch_Toolbox.Library.Forms
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void EditChannel(STChannelType ChannelType)
|
||||||
|
{
|
||||||
|
var Image = imageEditor.BaseImage;
|
||||||
|
if (Image != null)
|
||||||
|
{
|
||||||
|
OpenFileDialog ofd = new OpenFileDialog();
|
||||||
|
if (ofd.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
Bitmap ChannelDest = new Bitmap(ofd.FileName);
|
||||||
|
Bitmap newImage = BitmapExtension.ReplaceChannel(Image, ChannelDest, ChannelType);
|
||||||
|
imageEditor.SaveAndApplyImage(newImage, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void tabPage2_Click(object sender, EventArgs e)
|
private void tabPage2_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -234,5 +249,42 @@ namespace Switch_Toolbox.Library.Forms
|
|||||||
imageEditor.UpdateMipDisplay();
|
imageEditor.UpdateMipDisplay();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void channelListView_MouseClick(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
if (channelListView.SelectedItems.Count <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (e.Button)
|
||||||
|
{
|
||||||
|
case MouseButtons.Right:
|
||||||
|
{
|
||||||
|
Point p = new Point(e.X, e.Y);
|
||||||
|
stChannelToolstripMenu.Show(channelListView, p);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void replaceChannelToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
//Note first index (0) is RGBA display
|
||||||
|
int ChannelIndex = channelListView.SelectedIndices[0];
|
||||||
|
switch (ChannelIndex)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
EditChannel(STChannelType.Red);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
EditChannel(STChannelType.Green);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
EditChannel(STChannelType.Blue);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
EditChannel(STChannelType.Alpha);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -117,4 +117,7 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<metadata name="stChannelToolstripMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
</root>
|
</root>
|
@ -192,6 +192,9 @@ namespace Switch_Toolbox.Library
|
|||||||
{ TEX_FORMAT.R8G8B8A8_UNORM, new FormatInfo(4, 1, 1, 1, TargetBuffer.Color) },
|
{ TEX_FORMAT.R8G8B8A8_UNORM, new FormatInfo(4, 1, 1, 1, TargetBuffer.Color) },
|
||||||
{ TEX_FORMAT.R8G8B8A8_UNORM_SRGB, new FormatInfo(4, 1, 1, 1, TargetBuffer.Color) },
|
{ TEX_FORMAT.R8G8B8A8_UNORM_SRGB, new FormatInfo(4, 1, 1, 1, TargetBuffer.Color) },
|
||||||
{ TEX_FORMAT.R32G8X24_FLOAT, new FormatInfo(4, 1, 1, 1, TargetBuffer.Color) },
|
{ TEX_FORMAT.R32G8X24_FLOAT, new FormatInfo(4, 1, 1, 1, TargetBuffer.Color) },
|
||||||
|
{ TEX_FORMAT.R8G8_B8G8_UNORM, new FormatInfo(4, 1, 1, 1, TargetBuffer.Color) },
|
||||||
|
{ TEX_FORMAT.B8G8R8X8_UNORM, new FormatInfo(4, 1, 1, 1, TargetBuffer.Color) },
|
||||||
|
{ TEX_FORMAT.B5G5R5A1_UNORM, new FormatInfo(2, 1, 1, 1, TargetBuffer.Color) },
|
||||||
|
|
||||||
{ TEX_FORMAT.R10G10B10A2_UINT, new FormatInfo(4, 1, 1, 1, TargetBuffer.Color) },
|
{ TEX_FORMAT.R10G10B10A2_UINT, new FormatInfo(4, 1, 1, 1, TargetBuffer.Color) },
|
||||||
{ TEX_FORMAT.R10G10B10A2_UNORM, new FormatInfo(4, 1, 1, 1, TargetBuffer.Color) },
|
{ TEX_FORMAT.R10G10B10A2_UNORM, new FormatInfo(4, 1, 1, 1, TargetBuffer.Color) },
|
||||||
@ -615,9 +618,54 @@ namespace Switch_Toolbox.Library
|
|||||||
}
|
}
|
||||||
public void SaveBitMap(string FileName, int SurfaceLevel = 0, int MipLevel = 0)
|
public void SaveBitMap(string FileName, int SurfaceLevel = 0, int MipLevel = 0)
|
||||||
{
|
{
|
||||||
|
STProgressBar progressBar = new STProgressBar();
|
||||||
|
progressBar.Task = "Exporting Image Data...";
|
||||||
|
progressBar.Value = 0;
|
||||||
|
progressBar.StartPosition = FormStartPosition.CenterScreen;
|
||||||
|
progressBar.Show();
|
||||||
|
progressBar.Refresh();
|
||||||
|
|
||||||
|
if (ArrayCount > 1)
|
||||||
|
{
|
||||||
|
progressBar.Task = "Select dialog option... ";
|
||||||
|
|
||||||
|
var result = MessageBox.Show("Multiple image surfaces found! Would you like to export them all?", "Image Exporter",
|
||||||
|
MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
|
||||||
|
if (result == DialogResult.Yes)
|
||||||
|
{
|
||||||
|
string ext = Path.GetExtension(FileName);
|
||||||
|
|
||||||
|
int index = FileName.LastIndexOf('.');
|
||||||
|
string name = index == -1 ? FileName : FileName.Substring(0, index);
|
||||||
|
|
||||||
|
for (int i = 0; i < ArrayCount; i++)
|
||||||
|
{
|
||||||
|
progressBar.Task = $"Decoding Surface [{i}] for image {Text}... ";
|
||||||
|
progressBar.Value = (i * 100) / (int)ArrayCount;
|
||||||
|
progressBar.Refresh();
|
||||||
|
|
||||||
|
Bitmap arrayBitMap = GetBitmap(i, 0);
|
||||||
|
arrayBitMap.Save($"{name}_Slice_{i}_{ext}");
|
||||||
|
arrayBitMap.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
progressBar.Value = 100;
|
||||||
|
progressBar.Close();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
progressBar.Task = $"Decoding image {Text}... ";
|
||||||
|
progressBar.Value = 20;
|
||||||
|
progressBar.Refresh();
|
||||||
|
|
||||||
Bitmap bitMap = GetBitmap(SurfaceLevel, MipLevel);
|
Bitmap bitMap = GetBitmap(SurfaceLevel, MipLevel);
|
||||||
bitMap.Save(FileName);
|
bitMap.Save(FileName);
|
||||||
bitMap.Dispose();
|
bitMap.Dispose();
|
||||||
|
|
||||||
|
progressBar.Value = 100;
|
||||||
|
progressBar.Close();
|
||||||
}
|
}
|
||||||
public void SaveDDS(string FileName, int SurfaceLevel = 0, int MipLevel = 0)
|
public void SaveDDS(string FileName, int SurfaceLevel = 0, int MipLevel = 0)
|
||||||
{
|
{
|
||||||
@ -634,8 +682,8 @@ namespace Switch_Toolbox.Library
|
|||||||
dds.header.mipmapCount = (uint)MipCount;
|
dds.header.mipmapCount = (uint)MipCount;
|
||||||
dds.header.pitchOrLinearSize = (uint)surfaces[0].mipmaps[0].Length;
|
dds.header.pitchOrLinearSize = (uint)surfaces[0].mipmaps[0].Length;
|
||||||
|
|
||||||
if (surfaces.Count > 0)
|
if (surfaces.Count > 0) //Use DX10 format for array surfaces as it can do custom amounts
|
||||||
dds.SetFlags((DDS.DXGI_FORMAT)Format);
|
dds.SetFlags((DDS.DXGI_FORMAT)Format, true);
|
||||||
else
|
else
|
||||||
dds.SetFlags((DDS.DXGI_FORMAT)Format);
|
dds.SetFlags((DDS.DXGI_FORMAT)Format);
|
||||||
|
|
||||||
|
@ -210,6 +210,7 @@ namespace Switch_Toolbox.Library.IO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Type_LZ4F
|
public class Type_LZ4F
|
||||||
{
|
{
|
||||||
public static byte[] Decompress(byte[] data)
|
public static byte[] Decompress(byte[] data)
|
||||||
|
@ -48,6 +48,85 @@ namespace Switch_Toolbox.Library
|
|||||||
// return new Bitmap(original, new Size(width, height));
|
// return new Bitmap(original, new Size(width, height));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Bitmap ReplaceChannel(Image OriginalImage, Image ChannelImage, STChannelType ChannelType)
|
||||||
|
{
|
||||||
|
Bitmap b = new Bitmap(OriginalImage);
|
||||||
|
Bitmap c = new Bitmap(ChannelImage, new Size(b.Width, b.Height)); //Force to be same size
|
||||||
|
c = GrayScale(c); //Convert to grayscale
|
||||||
|
|
||||||
|
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height),
|
||||||
|
ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
|
||||||
|
int stride = bmData.Stride;
|
||||||
|
System.IntPtr Scan0 = bmData.Scan0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BitmapData cmData = c.LockBits(new Rectangle(0, 0, c.Width, c.Height),
|
||||||
|
ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
|
||||||
|
int cstride = cmData.Stride;
|
||||||
|
System.IntPtr cScan0 = cmData.Scan0;
|
||||||
|
|
||||||
|
unsafe
|
||||||
|
{
|
||||||
|
byte* p = (byte*)(void*)Scan0;
|
||||||
|
byte* channelPointer = (byte*)(void*)cScan0;
|
||||||
|
|
||||||
|
int nOffset = stride - b.Width * 4;
|
||||||
|
|
||||||
|
byte red, green, blue, alpha;
|
||||||
|
|
||||||
|
for (int y = 0; y < b.Height; ++y)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < b.Width; ++x)
|
||||||
|
{
|
||||||
|
blue = p[0];
|
||||||
|
green = p[1];
|
||||||
|
red = p[2];
|
||||||
|
alpha = p[3];
|
||||||
|
|
||||||
|
if (ChannelType == STChannelType.Red)
|
||||||
|
{
|
||||||
|
p[2] = channelPointer[2];
|
||||||
|
p[1] = green;
|
||||||
|
p[0] = blue;
|
||||||
|
p[3] = alpha;
|
||||||
|
}
|
||||||
|
else if (ChannelType == STChannelType.Green)
|
||||||
|
{
|
||||||
|
p[2] = red;
|
||||||
|
p[1] = channelPointer[2];
|
||||||
|
p[0] = blue;
|
||||||
|
p[3] = alpha;
|
||||||
|
}
|
||||||
|
else if (ChannelType == STChannelType.Blue)
|
||||||
|
{
|
||||||
|
p[2] = red;
|
||||||
|
p[1] = green;
|
||||||
|
p[0] = channelPointer[2];
|
||||||
|
p[3] = alpha;
|
||||||
|
}
|
||||||
|
else if (ChannelType == STChannelType.Alpha)
|
||||||
|
{
|
||||||
|
p[2] = red;
|
||||||
|
p[1] = green;
|
||||||
|
p[0] = blue;
|
||||||
|
p[3] = channelPointer[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
p += 4;
|
||||||
|
channelPointer += 4;
|
||||||
|
}
|
||||||
|
p += nOffset;
|
||||||
|
channelPointer += nOffset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
b.UnlockBits(bmData);
|
||||||
|
c.UnlockBits(cmData);
|
||||||
|
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
public static Bitmap SwapBlueRedChannels(Image image)
|
public static Bitmap SwapBlueRedChannels(Image image)
|
||||||
{
|
{
|
||||||
Bitmap b = new Bitmap(image);
|
Bitmap b = new Bitmap(image);
|
||||||
|
@ -10,6 +10,17 @@ namespace Switch_Toolbox.Library
|
|||||||
{
|
{
|
||||||
public class Utils
|
public class Utils
|
||||||
{
|
{
|
||||||
|
public static byte[] CreateMD5Hash(string filename)
|
||||||
|
{
|
||||||
|
using (var md5 = System.Security.Cryptography.MD5.Create())
|
||||||
|
{
|
||||||
|
using (var stream = File.OpenRead(filename))
|
||||||
|
{
|
||||||
|
return md5.ComputeHash(stream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static bool HasInterface(Type objectType, Type interfaceType)
|
public static bool HasInterface(Type objectType, Type interfaceType)
|
||||||
{
|
{
|
||||||
foreach (var inter in objectType.GetInterfaces())
|
foreach (var inter in objectType.GetInterfaces())
|
||||||
|
BIN
Toolbox/System.Numerics.Vectors.dll
Normal file
BIN
Toolbox/System.Numerics.Vectors.dll
Normal file
Binary file not shown.
@ -433,6 +433,9 @@
|
|||||||
<None Include="Resources\Save.png" />
|
<None Include="Resources\Save.png" />
|
||||||
<None Include="Resources\UpdateIcon.png" />
|
<None Include="Resources\UpdateIcon.png" />
|
||||||
<Content Include="Switch_Toolbox.csproj.user" />
|
<Content Include="Switch_Toolbox.csproj.user" />
|
||||||
|
<Content Include="System.Numerics.Vectors.dll">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
<Content Include="Tool.ico" />
|
<Content Include="Tool.ico" />
|
||||||
<None Include="Resources\Logo.png" />
|
<None Include="Resources\Logo.png" />
|
||||||
<Content Include="Version.txt">
|
<Content Include="Version.txt">
|
||||||
|
@ -14,10 +14,12 @@ namespace Toolbox
|
|||||||
{
|
{
|
||||||
static Release[] releases;
|
static Release[] releases;
|
||||||
public static bool CanUpdate = false;
|
public static bool CanUpdate = false;
|
||||||
|
public static bool Downloaded = false;
|
||||||
public static Release LatestRelease;
|
public static Release LatestRelease;
|
||||||
public static List<GitHubCommit> CommitList = new List<GitHubCommit>();
|
public static List<GitHubCommit> CommitList = new List<GitHubCommit>();
|
||||||
public static DateTime LatestReleaseTime;
|
public static DateTime LatestReleaseTime;
|
||||||
|
|
||||||
|
|
||||||
public static void CheckLatest()
|
public static void CheckLatest()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -36,11 +38,18 @@ namespace Toolbox
|
|||||||
latest.Assets[0].UpdatedAt.ToString());
|
latest.Assets[0].UpdatedAt.ToString());
|
||||||
|
|
||||||
if (Runtime.CompileDate != latest.Assets[0].UpdatedAt.ToString())
|
if (Runtime.CompileDate != latest.Assets[0].UpdatedAt.ToString())
|
||||||
|
{
|
||||||
|
DownloadRelease();
|
||||||
|
if (CanUpdate)
|
||||||
{
|
{
|
||||||
LatestReleaseTime = latest.Assets[0].UpdatedAt.DateTime;
|
LatestReleaseTime = latest.Assets[0].UpdatedAt.DateTime;
|
||||||
CanUpdate = true;
|
|
||||||
LatestRelease = latest;
|
LatestRelease = latest;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -49,6 +58,31 @@ namespace Toolbox
|
|||||||
Console.WriteLine($"Failed to get latest update\n{ex.ToString()}");
|
Console.WriteLine($"Failed to get latest update\n{ex.ToString()}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void DownloadRelease()
|
||||||
|
{
|
||||||
|
ProcessStartInfo p = new ProcessStartInfo();
|
||||||
|
p.WindowStyle = ProcessWindowStyle.Hidden;
|
||||||
|
p.CreateNoWindow = true;
|
||||||
|
p.FileName = Path.Combine(Runtime.ExecutableDir, "Updater.exe");
|
||||||
|
p.WorkingDirectory = Path.Combine(Runtime.ExecutableDir, "updater/");
|
||||||
|
Console.WriteLine($"Updater: {p.FileName}");
|
||||||
|
p.Arguments = "-d";
|
||||||
|
|
||||||
|
Process process = new Process();
|
||||||
|
process.StartInfo = p;
|
||||||
|
Console.WriteLine("Downloading...");
|
||||||
|
process.Start();
|
||||||
|
process.WaitForExit();
|
||||||
|
if (process.ExitCode != 0)
|
||||||
|
throw new TimeoutException();
|
||||||
|
Console.WriteLine("Finished downloading");
|
||||||
|
string updateExe = Path.Combine(Runtime.ExecutableDir, "master\\Toolbox.exe"),
|
||||||
|
currentExe = System.Reflection.Assembly.GetEntryAssembly().Location;
|
||||||
|
if (!Utils.CreateMD5Hash(currentExe).SequenceEqual(Utils.CreateMD5Hash(updateExe)))
|
||||||
|
CanUpdate = true;
|
||||||
|
}
|
||||||
|
|
||||||
static async Task GetCommits(GitHubClient client)
|
static async Task GetCommits(GitHubClient client)
|
||||||
{
|
{
|
||||||
var options = new ApiOptions
|
var options = new ApiOptions
|
||||||
|
Loading…
Reference in New Issue
Block a user