Debugger: PPU Viewer - Added "Export to PNG" option

This commit is contained in:
Sour 2018-09-15 11:11:46 -04:00
parent d03a0538d7
commit 766eea5829
6 changed files with 128 additions and 23 deletions

View file

@ -63,6 +63,8 @@
this.mnuCopyToClipboard = new System.Windows.Forms.ToolStripMenuItem();
this.picChrBank2 = new System.Windows.Forms.PictureBox();
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
this.mnuExportToPng = new System.Windows.Forms.ToolStripMenuItem();
this.tableLayoutPanel3.SuspendLayout();
this.grpDisplayOptions.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
@ -464,9 +466,11 @@
//
this.ctxMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.mnuCopyHdPack,
this.mnuCopyToClipboard});
this.toolStripMenuItem1,
this.mnuCopyToClipboard,
this.mnuExportToPng});
this.ctxMenu.Name = "ctxMenu";
this.ctxMenu.Size = new System.Drawing.Size(222, 48);
this.ctxMenu.Size = new System.Drawing.Size(222, 98);
this.ctxMenu.Opening += new System.ComponentModel.CancelEventHandler(this.ctxMenu_Opening);
//
// mnuCopyHdPack
@ -506,6 +510,19 @@
this.toolTip.InitialDelay = 10;
this.toolTip.ReshowDelay = 10;
//
// toolStripMenuItem1
//
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
this.toolStripMenuItem1.Size = new System.Drawing.Size(218, 6);
//
// mnuExportToPng
//
this.mnuExportToPng.Image = global::Mesen.GUI.Properties.Resources.Export;
this.mnuExportToPng.Name = "mnuExportToPng";
this.mnuExportToPng.Size = new System.Drawing.Size(221, 22);
this.mnuExportToPng.Text = "Export image to PNG";
this.mnuExportToPng.Click += new System.EventHandler(this.mnuExportToPng_Click);
//
// ctrlChrViewer
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -575,5 +592,7 @@
private System.Windows.Forms.ToolStripMenuItem mnuCopyToClipboard;
private System.Windows.Forms.CheckBox chkAutoPalette;
private System.Windows.Forms.CheckBox chkShowSingleColorTilesInGrayscale;
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
private System.Windows.Forms.ToolStripMenuItem mnuExportToPng;
}
}

View file

@ -10,6 +10,7 @@ using System.Windows.Forms;
using System.Runtime.InteropServices;
using Mesen.GUI.Controls;
using Mesen.GUI.Config;
using Mesen.GUI.Forms;
namespace Mesen.GUI.Debugger.Controls
{
@ -466,15 +467,33 @@ namespace Mesen.GUI.Debugger.Controls
CopyToClipboard();
}
private Bitmap GetCopyBitmap()
{
Bitmap copy = new Bitmap(128, 256);
using(Graphics g = Graphics.FromImage(copy)) {
g.DrawImage(_originalChrBanks[0], 0, 0);
g.DrawImage(_originalChrBanks[1], 0, 128);
}
return copy;
}
public void CopyToClipboard()
{
using(Bitmap copy = new Bitmap(128, 256)) {
using(Graphics g = Graphics.FromImage(copy)) {
g.DrawImage(_originalChrBanks[0], 0, 0);
g.DrawImage(_originalChrBanks[1], 0, 128);
}
using(Bitmap copy = GetCopyBitmap()) {
Clipboard.SetImage(copy);
}
}
private void mnuExportToPng_Click(object sender, EventArgs e)
{
using(SaveFileDialog sfd = new SaveFileDialog()) {
sfd.SetFilter("PNG files|*.png");
if(sfd.ShowDialog() == DialogResult.OK) {
using(Bitmap copy = GetCopyBitmap()) {
copy.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Png);
}
}
}
}
}
}

View file

@ -68,6 +68,8 @@
this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
this.lblMirroring = new System.Windows.Forms.Label();
this.lblMirroringType = new System.Windows.Forms.Label();
this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();
this.mnuExportToPng = new System.Windows.Forms.ToolStripMenuItem();
this.tableLayoutPanel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.picNametable)).BeginInit();
this.ctxMenu.SuspendLayout();
@ -120,9 +122,11 @@
this.toolStripMenuItem1,
this.mnuCopyHdPack,
this.mnuCopyNametableHdPack,
this.mnuCopyToClipboard});
this.toolStripMenuItem2,
this.mnuCopyToClipboard,
this.mnuExportToPng});
this.ctxMenu.Name = "ctxMenu";
this.ctxMenu.Size = new System.Drawing.Size(261, 98);
this.ctxMenu.Size = new System.Drawing.Size(261, 148);
this.ctxMenu.Opening += new System.ComponentModel.CancelEventHandler(this.ctxMenu_Opening);
//
// mnuShowInChrViewer
@ -532,6 +536,19 @@
this.lblMirroringType.TabIndex = 1;
this.lblMirroringType.Text = "Horizontal";
//
// toolStripMenuItem2
//
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
this.toolStripMenuItem2.Size = new System.Drawing.Size(257, 6);
//
// mnuExportToPng
//
this.mnuExportToPng.Image = global::Mesen.GUI.Properties.Resources.Export;
this.mnuExportToPng.Name = "mnuExportToPng";
this.mnuExportToPng.Size = new System.Drawing.Size(260, 22);
this.mnuExportToPng.Text = "Export image to PNG";
this.mnuExportToPng.Click += new System.EventHandler(this.mnuExportToPng_Click);
//
// ctrlNametableViewer
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -598,5 +615,7 @@
private System.Windows.Forms.CheckBox chkUseGrayscalePalette;
private System.Windows.Forms.CheckBox chkHighlightTileUpdates;
private System.Windows.Forms.CheckBox chkHighlightAttributeUpdates;
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;
private System.Windows.Forms.ToolStripMenuItem mnuExportToPng;
}
}

View file

@ -448,5 +448,15 @@ namespace Mesen.GUI.Debugger.Controls
}
Clipboard.SetText(sb.ToString());
}
private void mnuExportToPng_Click(object sender, EventArgs e)
{
using(SaveFileDialog sfd = new SaveFileDialog()) {
sfd.SetFilter("PNG files|*.png");
if(sfd.ShowDialog() == DialogResult.OK) {
_nametableImage.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Png);
}
}
}
}
}

View file

@ -39,6 +39,7 @@
this.mnuShowInChrViewer = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
this.mnuCopyHdPack = new System.Windows.Forms.ToolStripMenuItem();
this.mnuCopyAllSpritesHdPack = new System.Windows.Forms.ToolStripMenuItem();
this.mnuCopyToClipboard = new System.Windows.Forms.ToolStripMenuItem();
this.lblScreenPreview = new System.Windows.Forms.Label();
this.lblTile = new System.Windows.Forms.Label();
@ -57,7 +58,8 @@
this.chkBackgroundPriority = new System.Windows.Forms.CheckBox();
this.ctrlTilePalette = new Mesen.GUI.Debugger.Controls.ctrlTilePalette();
this.picSprites = new System.Windows.Forms.PictureBox();
this.mnuCopyAllSpritesHdPack = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();
this.mnuExportToPng = new System.Windows.Forms.ToolStripMenuItem();
this.tableLayoutPanel3.SuspendLayout();
this.grpSpriteInfo.SuspendLayout();
this.tableLayoutPanel4.SuspendLayout();
@ -187,9 +189,11 @@
this.toolStripMenuItem1,
this.mnuCopyHdPack,
this.mnuCopyAllSpritesHdPack,
this.mnuCopyToClipboard});
this.toolStripMenuItem2,
this.mnuCopyToClipboard,
this.mnuExportToPng});
this.ctxMenu.Name = "ctxMenu";
this.ctxMenu.Size = new System.Drawing.Size(255, 120);
this.ctxMenu.Size = new System.Drawing.Size(255, 148);
this.ctxMenu.Opening += new System.ComponentModel.CancelEventHandler(this.ctxMenu_Opening);
//
// mnuShowInChrViewer
@ -213,6 +217,13 @@
this.mnuCopyHdPack.Text = "Copy Tile (HD Pack Format)";
this.mnuCopyHdPack.Click += new System.EventHandler(this.mnuCopyHdPack_Click);
//
// mnuCopyAllSpritesHdPack
//
this.mnuCopyAllSpritesHdPack.Name = "mnuCopyAllSpritesHdPack";
this.mnuCopyAllSpritesHdPack.Size = new System.Drawing.Size(254, 22);
this.mnuCopyAllSpritesHdPack.Text = "Copy All Sprites (HD Pack Format)";
this.mnuCopyAllSpritesHdPack.Click += new System.EventHandler(this.mnuCopyAllSpritesHdPack_Click);
//
// mnuCopyToClipboard
//
this.mnuCopyToClipboard.Image = global::Mesen.GUI.Properties.Resources.Copy;
@ -410,12 +421,18 @@
this.picSprites.MouseLeave += new System.EventHandler(this.picSprites_MouseLeave);
this.picSprites.MouseMove += new System.Windows.Forms.MouseEventHandler(this.picSprites_MouseMove);
//
// mnuCopyAllSpritesHdPack
// toolStripMenuItem2
//
this.mnuCopyAllSpritesHdPack.Name = "mnuCopyAllSpritesHdPack";
this.mnuCopyAllSpritesHdPack.Size = new System.Drawing.Size(254, 22);
this.mnuCopyAllSpritesHdPack.Text = "Copy All Sprites (HD Pack Format)";
this.mnuCopyAllSpritesHdPack.Click += new System.EventHandler(this.mnuCopyAllSpritesHdPack_Click);
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
this.toolStripMenuItem2.Size = new System.Drawing.Size(251, 6);
//
// mnuExportToPng
//
this.mnuExportToPng.Image = global::Mesen.GUI.Properties.Resources.Export;
this.mnuExportToPng.Name = "mnuExportToPng";
this.mnuExportToPng.Size = new System.Drawing.Size(254, 22);
this.mnuExportToPng.Text = "Export image to PNG";
this.mnuExportToPng.Click += new System.EventHandler(this.mnuExportToPng_Click);
//
// ctrlSpriteViewer
//
@ -470,5 +487,7 @@
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
private System.Windows.Forms.ToolStripMenuItem mnuCopyToClipboard;
private System.Windows.Forms.ToolStripMenuItem mnuCopyAllSpritesHdPack;
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;
private System.Windows.Forms.ToolStripMenuItem mnuExportToPng;
}
}

View file

@ -11,6 +11,7 @@ using System.Runtime.InteropServices;
using Mesen.GUI.Controls;
using System.Drawing.Imaging;
using Mesen.GUI.Config;
using Mesen.GUI.Forms;
namespace Mesen.GUI.Debugger.Controls
{
@ -339,18 +340,36 @@ namespace Mesen.GUI.Debugger.Controls
CopyToClipboard();
}
public void CopyToClipboard()
private Bitmap GetCopyBitmap()
{
Bitmap src = _copyPreview ? _screenPreview : _imgSprites;
using(Bitmap target = new Bitmap(src.Width, src.Height)) {
using(Graphics g = Graphics.FromImage(target)) {
g.Clear(Color.FromArgb(64, 64, 64));
g.DrawImage(src, 0, 0);
}
Bitmap target = new Bitmap(src.Width, src.Height);
using(Graphics g = Graphics.FromImage(target)) {
g.Clear(Color.FromArgb(64, 64, 64));
g.DrawImage(src, 0, 0);
}
return target;
}
public void CopyToClipboard()
{
using(Bitmap target = GetCopyBitmap()) {
Clipboard.SetImage(target);
}
}
private void mnuExportToPng_Click(object sender, EventArgs e)
{
using(SaveFileDialog sfd = new SaveFileDialog()) {
sfd.SetFilter("PNG files|*.png");
if(sfd.ShowDialog() == DialogResult.OK) {
using(Bitmap target = GetCopyBitmap()) {
target.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Png);
}
}
}
}
private void mnuCopyAllSpritesHdPack_Click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();