diff options
author | Alexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com> | 2017-04-28 04:22:15 +0300 |
---|---|---|
committer | Alexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com> | 2017-04-28 04:22:15 +0300 |
commit | 5b2be402f7142ee7a10efc02b47a13bee1da78b9 (patch) | |
tree | b2772480f60e27dce403c5f2af990861375bda15 | |
parent | 34c28b005878cfd2e93e3a2aa67dd5920d63869d (diff) |
'Take screenshot' feature
-rw-r--r-- | MainForm.Designer.cs | 19 | ||||
-rw-r--r-- | MainForm.cs | 36 | ||||
-rw-r--r-- | MainForm.resx | 21 | ||||
-rw-r--r-- | WorkerForm.cs | 37 | ||||
-rw-r--r-- | mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config | 2 |
5 files changed, 111 insertions, 4 deletions
diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs index 430f1902..59220638 100644 --- a/MainForm.Designer.cs +++ b/MainForm.Designer.cs @@ -145,6 +145,8 @@ this.checkedListBoxDefaultGames = new System.Windows.Forms.CheckedListBox();
this.timerCalculateGames = new System.Windows.Forms.Timer(this.components);
this.timerConnectionCheck = new System.Windows.Forms.Timer(this.components);
+ this.toolStripMenuItem8 = new System.Windows.Forms.ToolStripSeparator();
+ this.takeScreenshotToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.menuStrip.SuspendLayout();
this.groupBoxOptions.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxArt)).BeginInit();
@@ -622,7 +624,9 @@ this.openFTPInExplorerToolStripMenuItem,
this.toolStripMenuItem7,
this.shellToolStripMenuItem,
- this.openTelnetToolStripMenuItem});
+ this.openTelnetToolStripMenuItem,
+ this.toolStripMenuItem8,
+ this.takeScreenshotToolStripMenuItem});
this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem";
resources.ApplyResources(this.toolsToolStripMenuItem, "toolsToolStripMenuItem");
//
@@ -969,6 +973,17 @@ this.timerConnectionCheck.Interval = 500;
this.timerConnectionCheck.Tick += new System.EventHandler(this.timerConnectionCheck_Tick);
//
+ // toolStripMenuItem8
+ //
+ this.toolStripMenuItem8.Name = "toolStripMenuItem8";
+ resources.ApplyResources(this.toolStripMenuItem8, "toolStripMenuItem8");
+ //
+ // takeScreenshotToolStripMenuItem
+ //
+ this.takeScreenshotToolStripMenuItem.Name = "takeScreenshotToolStripMenuItem";
+ resources.ApplyResources(this.takeScreenshotToolStripMenuItem, "takeScreenshotToolStripMenuItem");
+ this.takeScreenshotToolStripMenuItem.Click += new System.EventHandler(this.takeScreenshotToolStripMenuItem_Click);
+ //
// MainForm
//
this.AllowDrop = true;
@@ -1124,6 +1139,8 @@ private System.Windows.Forms.ToolStripSeparator toolStripMenuItem7;
private System.Windows.Forms.ToolStripMenuItem openTelnetToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem languageToolStripMenuItem;
+ private System.Windows.Forms.ToolStripSeparator toolStripMenuItem8;
+ private System.Windows.Forms.ToolStripMenuItem takeScreenshotToolStripMenuItem;
}
}
diff --git a/MainForm.cs b/MainForm.cs index 880b29b4..26402b88 100644 --- a/MainForm.cs +++ b/MainForm.cs @@ -6,6 +6,7 @@ using System; using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
+using System.Drawing.Imaging;
using System.Globalization;
using System.IO;
using System.Linq;
@@ -1476,5 +1477,40 @@ namespace com.clusterrr.hakchi_gui MessageBox.Show(this, Resources.NoTelnet, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
+
+ private void takeScreenshotToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ if (RequirePatchedKernel() == DialogResult.No) return;
+ try
+ {
+ if (WaitingClovershellForm.WaitForDevice(this))
+ {
+ var screenshot = WorkerForm.TakeScreenshot();
+ var screenshotPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()+".png");
+ screenshot.Save(screenshotPath, ImageFormat.Png);
+ var showProcess = new Process()
+ {
+ StartInfo = new ProcessStartInfo()
+ {
+ FileName = screenshotPath
+ }
+ };
+ showProcess.Start();
+ new Thread(delegate() {
+ showProcess.WaitForExit();
+ try
+ {
+ File.Delete(screenshotPath);
+ }
+ catch { }
+ }).Start();
+ }
+ }
+ catch (Exception ex)
+ {
+ Debug.WriteLine(ex.Message + ex.StackTrace);
+ MessageBox.Show(this, ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
}
}
diff --git a/MainForm.resx b/MainForm.resx index aac5f234..83ac946f 100644 --- a/MainForm.resx +++ b/MainForm.resx @@ -560,6 +560,15 @@ <data name="openTelnetToolStripMenuItem.Text" xml:space="preserve">
<value>Open Telnet client</value>
</data>
+ <data name="toolStripMenuItem8.Size" type="System.Drawing.Size, System.Drawing">
+ <value>328, 6</value>
+ </data>
+ <data name="takeScreenshotToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>331, 22</value>
+ </data>
+ <data name="takeScreenshotToolStripMenuItem.Text" xml:space="preserve">
+ <value>Take screenshot</value>
+ </data>
<data name="toolsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>48, 20</value>
</data>
@@ -3078,6 +3087,18 @@ <data name=">>timerConnectionCheck.Type" xml:space="preserve">
<value>System.Windows.Forms.Timer, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
+ <data name=">>toolStripMenuItem8.Name" xml:space="preserve">
+ <value>toolStripMenuItem8</value>
+ </data>
+ <data name=">>toolStripMenuItem8.Type" xml:space="preserve">
+ <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name=">>takeScreenshotToolStripMenuItem.Name" xml:space="preserve">
+ <value>takeScreenshotToolStripMenuItem</value>
+ </data>
+ <data name=">>takeScreenshotToolStripMenuItem.Type" xml:space="preserve">
+ <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
<data name=">>$this.Name" xml:space="preserve">
<value>MainForm</value>
</data>
diff --git a/WorkerForm.cs b/WorkerForm.cs index 8f022579..a3b6dc15 100644 --- a/WorkerForm.cs +++ b/WorkerForm.cs @@ -6,6 +6,8 @@ using SevenZip; using System;
using System.Collections.Generic;
using System.Diagnostics;
+using System.Drawing;
+using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
@@ -69,7 +71,7 @@ namespace com.clusterrr.hakchi_gui DialogResult = DialogResult.None;
baseDirectory = MainForm.BaseDirectory;
fes1Path = Path.Combine(Path.Combine(baseDirectory, "data"), "fes1.bin");
- ubootPath = Path.Combine(Path.Combine(baseDirectory, "data"), "uboot.bin");
+ ubootPath = Path.Combine(Path.Combine(baseDirectory, "data"), "uboot.bin");
#if DEBUG
tempDirectory = Path.Combine(baseDirectory, "temp");
#else
@@ -650,6 +652,39 @@ namespace com.clusterrr.hakchi_gui }
}
+ public static Image TakeScreenshot()
+ {
+ var clovershell = MainForm.Clovershell;
+ var screenshot = new Bitmap(1280, 720, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
+ var rawStream = new MemoryStream();
+ clovershell.Execute("cat /dev/fb0", null, rawStream, null, 1000, true);
+ var raw = rawStream.ToArray();
+ BitmapData data = screenshot.LockBits(
+ new Rectangle(0, 0, screenshot.Width, screenshot.Height),
+ ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
+
+ int rawOffset = 0;
+ unsafe
+ {
+ for (int y = 0; y < screenshot.Height; ++y)
+ {
+ byte* row = (byte*)data.Scan0 + (y * data.Stride);
+ int columnOffset = 0;
+ for (int x = 0; x < screenshot.Width; ++x)
+ {
+ row[columnOffset] = raw[rawOffset];
+ row[columnOffset + 1] = raw[rawOffset + 1];
+ row[columnOffset + 2] = raw[rawOffset + 2];
+
+ columnOffset += 3;
+ rawOffset += 4;
+ }
+ }
+ }
+ screenshot.UnlockBits(data);
+ return screenshot;
+ }
+
public void Memboot(int maxProgress = -1, int progress = 0)
{
SetProgress(progress, maxProgress < 0 ? 1000 : maxProgress);
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config index 68e938f6..39ae5dba 100644 --- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config @@ -1,4 +1,2 @@ cfg_boot_stock_firmware='n' cfg_boot_stock='n' -cfg_disable_armet='y' -cfg_nes_extra_args='--ppu-palette 2' |