From 77800475cbe3ad5eb5ef0a743881b468c04047e4 Mon Sep 17 00:00:00 2001
From: Serge <5920850+seerge@users.noreply.github.com>
Date: Wed, 6 Sep 2023 16:01:18 +0200
Subject: [PATCH] Matrix Clock
---
app/AnimeMatrix/AnimeMatrixDevice.cs | 183 ++++++++++++++-------------
app/Properties/Resources.Designer.cs | 10 ++
app/Properties/Resources.resx | 3 +
app/Resources/Font.otf | Bin 0 -> 7444 bytes
app/Resources/Vector 3.png | Bin 2400 -> 0 bytes
app/Settings.cs | 1 -
6 files changed, 109 insertions(+), 88 deletions(-)
create mode 100644 app/Resources/Font.otf
delete mode 100644 app/Resources/Vector 3.png
diff --git a/app/AnimeMatrix/AnimeMatrixDevice.cs b/app/AnimeMatrix/AnimeMatrixDevice.cs
index 4e251755..58664d8e 100644
--- a/app/AnimeMatrix/AnimeMatrixDevice.cs
+++ b/app/AnimeMatrix/AnimeMatrixDevice.cs
@@ -1,6 +1,5 @@
// Source thanks to https://github.com/vddCore/Starlight with some adjustments from me
-using GHelper;
using GHelper.AnimeMatrix.Communication;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
@@ -8,7 +7,6 @@ using System.Drawing.Text;
using System.Globalization;
using System.Management;
using System.Text;
-using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window;
namespace Starlight.AnimeMatrix
{
@@ -80,6 +78,7 @@ namespace Starlight.AnimeMatrix
}
+
public class AnimeMatrixDevice : Device
{
int UpdatePageLength = 490;
@@ -99,6 +98,9 @@ namespace Starlight.AnimeMatrix
private static AnimeType _model = AnimeType.GA402;
+ [System.Runtime.InteropServices.DllImport("gdi32.dll")]
+ private static extern IntPtr AddFontMemResourceEx(IntPtr pbFont, uint cbFont, IntPtr pdv, [System.Runtime.InteropServices.In] ref uint pcFonts);
+ private PrivateFontCollection fonts = new PrivateFontCollection();
public AnimeMatrixDevice()
: base(0x0B05, 0x193B, 640)
@@ -128,8 +130,21 @@ namespace Starlight.AnimeMatrix
_displayBuffer = new byte[LedCount];
+ LoadMFont();
+
}
+ private void LoadMFont()
+ {
+ byte[] fontData = GHelper.Properties.Resources.MFont;
+ IntPtr fontPtr = System.Runtime.InteropServices.Marshal.AllocCoTaskMem(fontData.Length);
+ System.Runtime.InteropServices.Marshal.Copy(fontData, 0, fontPtr, fontData.Length);
+ uint dummy = 0;
+
+ fonts.AddMemoryFont(fontPtr, GHelper.Properties.Resources.MFont.Length);
+ AddFontMemResourceEx(fontPtr, (uint)GHelper.Properties.Resources.MFont.Length, IntPtr.Zero, ref dummy);
+ System.Runtime.InteropServices.Marshal.FreeCoTaskMem(fontPtr);
+ }
public string GetModel()
{
@@ -369,20 +384,57 @@ namespace Starlight.AnimeMatrix
public void PresentClock()
{
- int second = DateTime.Now.Second;
- string time;
-
- if (CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern.Contains("H"))
- time = DateTime.Now.ToString("H" + ((second % 2 == 0) ? ":" : " ") + "mm");
- else
- time = DateTime.Now.ToString("h" + ((second % 2 == 0) ? ":" : " ") + "mmtt");
+ string second = (DateTime.Now.Second % 2 == 0) ? ":" : " ";
+ string time = DateTime.Now.ToString("HH" + second + "mm");
+ /*
if (_model == AnimeType.GA401)
+ {
PresentText(time);
- else
- PresentTextDiagonal(time);
+ return;
+ }
+ */
+
+ Clear();
+ TextDiagonal(time, 16, 12, 22);
+ TextDiagonal(DateTime.Now.ToString("yyyy'. 'MM'. 'dd"), 11F, 2, 8);
+ Present();
+
}
+ public void TextDiagonal(string text, float fontSize = 10, int deltaX = 0, int deltaY = 10)
+ {
+
+ int maxX = (int)Math.Sqrt(MaxRows * MaxRows + MaxColumns * MaxColumns);
+ int textHeight;
+
+ using (Bitmap bmp = new Bitmap(maxX, MaxRows))
+ {
+ using (Graphics g = Graphics.FromImage(bmp))
+ {
+ g.CompositingQuality = CompositingQuality.HighQuality;
+ g.SmoothingMode = SmoothingMode.AntiAlias;
+ g.TextRenderingHint = TextRenderingHint.SingleBitPerPixel;
+
+ using (Font font = new Font(fonts.Families[0], fontSize, FontStyle.Regular, GraphicsUnit.Pixel))
+ {
+ SizeF textSize = g.MeasureString(text, font);
+ textHeight = (int)textSize.Height;
+ g.DrawString(text, font, Brushes.White, 0, 0);
+ }
+ }
+
+ for (int y = 0; y < bmp.Height; y++)
+ {
+ for (int x = 0; x < bmp.Width; x++)
+ {
+ var pixel = bmp.GetPixel(x, y);
+ var color = (pixel.R + pixel.G + pixel.B) / 3;
+ if (color > 100) SetLedDiagonal(x, y, (byte)color, deltaX, deltaY);
+ }
+ }
+ }
+ }
public void PresentText(string text1, string text2 = "")
@@ -410,16 +462,41 @@ namespace Starlight.AnimeMatrix
}
+ bmp.Save("test.bmp", ImageFormat.Bmp);
+
GenerateFrame(bmp);
Present();
}
}
- public void GenerateFrame(Image image, float zoom = 1, int panX = 0, int panY = 0, InterpolationMode quality = InterpolationMode.Default)
+ public void GenerateFrame(Image image, float zoom = 100, int panX = 0, int panY = 0, InterpolationMode quality = InterpolationMode.Default)
{
- using (Bitmap bmp = GeneratePicture(image, zoom, panX, panY, quality))
+
+ int width = MaxColumns / 2 * 6;
+ int height = MaxRows;
+
+ int targetWidth = MaxColumns * 2;
+
+ float scale;
+
+ using (Bitmap bmp = new Bitmap(targetWidth, height))
{
+ scale = Math.Min((float)width / (float)image.Width, (float)height / (float)image.Height) * zoom / 100;
+
+ using (var graph = Graphics.FromImage(bmp))
+ {
+ var scaleWidth = (float)(image.Width * scale);
+ var scaleHeight = (float)(image.Height * scale);
+
+ graph.InterpolationMode = quality;
+ graph.CompositingQuality = CompositingQuality.HighQuality;
+ graph.SmoothingMode = SmoothingMode.AntiAlias;
+
+ graph.DrawImage(image, (float)Math.Round(targetWidth - (scaleWidth + panX) * targetWidth / width), -panY, (float)Math.Round(scaleWidth * targetWidth / width), scaleHeight);
+
+ }
+
for (int y = 0; y < bmp.Height; y++)
{
for (int x = 0; x < bmp.Width; x++)
@@ -435,85 +512,17 @@ namespace Starlight.AnimeMatrix
}
- public Bitmap GeneratePicture(Image image, float zoom = 100, int panX = 0, int panY = 0, InterpolationMode quality = InterpolationMode.Default)
+ public void SetLedDiagonal(int x, int y, byte color, int deltaX = 0, int deltaY = 10)
{
+ x += deltaX;
+ y -= deltaY;
- int width = MaxColumns * 3;
- int height = MaxRows;
-
- int targetWidth = MaxColumns * 2;
-
- float scale;
-
- Bitmap bmp = new Bitmap(targetWidth, height);
- {
- scale = Math.Min((float)width / (float)image.Width, (float)height / (float)image.Height) * zoom / 100;
-
- using (var graph = Graphics.FromImage(bmp))
- {
- var scaleWidth = (float)(image.Width * scale);
- var scaleHeight = (float)(image.Height * scale);
-
- graph.InterpolationMode = quality;
- graph.CompositingQuality = CompositingQuality.HighQuality;
- graph.SmoothingMode = SmoothingMode.AntiAlias;
-
- graph.DrawImage(image, (float)Math.Round(targetWidth - (scaleWidth + panX) * targetWidth / width), -panY, (float)Math.Round(scaleWidth * targetWidth / width), scaleHeight);
- return bmp;
- }
-
- }
+ int plX = (x - y) / 2;
+ int plY = x + y;
+ SetLedPlanar(plX, plY, color);
}
- public void SetLedDiagonal(int x, int y, byte color, int delta = 10)
- {
- //x += delta;
- y -= delta;
-
- int dx = (x - y) / 2;
- int dy = x + y;
- SetLedPlanar(dx, dy, color);
- }
-
- public void PresentTextDiagonal(string text)
- {
-
- Clear();
-
- int maxX = (int)Math.Sqrt(MaxRows * MaxRows + MaxColumns * MaxColumns);
- int textHeight;
-
- using (Bitmap bmp = new Bitmap(maxX, MaxRows))
- {
- using (Graphics g = Graphics.FromImage(bmp))
- {
- g.CompositingQuality = CompositingQuality.HighQuality;
- g.SmoothingMode = SmoothingMode.AntiAlias;
- g.TextRenderingHint = TextRenderingHint.SingleBitPerPixel;
-
- using (Font font = new Font("Consolas", 11, FontStyle.Regular, GraphicsUnit.Pixel))
- {
- SizeF textSize = g.MeasureString(text, font);
- textHeight = (int)textSize.Height;
- g.DrawString(text, font, Brushes.White, 4, 0);
- }
- }
-
- for (int y = 0; y < bmp.Height; y++)
- {
- for (int x = 0; x < bmp.Width; x++)
- {
- var pixel = bmp.GetPixel(x, y);
- var color = (pixel.R + pixel.G + pixel.B) / 3;
- SetLedDiagonal(x, y, (byte)color, textHeight - 8);
- }
- }
- }
-
- Present();
- }
-
private bool IsRowInRange(int row)
{
return (row >= 0 && row < MaxRows);
diff --git a/app/Properties/Resources.Designer.cs b/app/Properties/Resources.Designer.cs
index 52eb7f23..1feaca86 100644
--- a/app/Properties/Resources.Designer.cs
+++ b/app/Properties/Resources.Designer.cs
@@ -610,6 +610,16 @@ namespace GHelper.Properties {
}
}
+ ///
+ /// Looks up a localized resource of type System.Byte[].
+ ///
+ internal static byte[] MFont {
+ get {
+ object obj = ResourceManager.GetObject("MFont", resourceCulture);
+ return ((byte[])(obj));
+ }
+ }
+
///
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
///
diff --git a/app/Properties/Resources.resx b/app/Properties/Resources.resx
index b1630dae..0bd6a5cb 100644
--- a/app/Properties/Resources.resx
+++ b/app/Properties/Resources.resx
@@ -289,4 +289,7 @@
..\Resources\icons8-rocket-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\Font.otf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
\ No newline at end of file
diff --git a/app/Resources/Font.otf b/app/Resources/Font.otf
new file mode 100644
index 0000000000000000000000000000000000000000..ef798d03ca432d05fade9a39d3fc4717c8651755
GIT binary patch
literal 7444
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
literal 0
HcmV?d00001
diff --git a/app/Resources/Vector 3.png b/app/Resources/Vector 3.png
deleted file mode 100644
index 024ea3fd617100efcbf45a8e08830748deb8b717..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 2400
zcmb_e`#+R>9{BMHi>ZBeE)rMj=!3xa1kRREnI_pq*KwT*_f$S2IOhdYl=z
zWNM|E=y*Qr<8poF5Z|N^vMgE&2S#3MZ1R=
zkar6cM)X??P}Mob4m>J*?6l{vQxk{uifvG|ywnH(;1vJ633c4oWg-9ZU|fUz`nwck
zL-hQ}6HL%G<*=%zTK`j^Q#`%TEPisdz*86Xgq=Cpv4>Ujvg0eaPErNji_;3pBx6Hi
zY(@-s<7Hla@aOaxw9m^xey!N_PEpcm>7Wm?vP&eDIKX@7?@KZMjUn`pSc!i}Sr2k=
zqwWBdYTm;KMNP^%O%M7nR{D3aZ3O+5)jBV@3>UWmJ^7P^a8wzQO+3B2Mzx?V%io>4
z%dJ~_2;?wjW4O3GPG~9a(4`{b_X(H@Q3sp4l(Cg;`AKOOnjkw|#8eC;H(j|^wp5@|
zwSl-rP`8fh%GnfXv=(9FB1!YqJqVT*>`W
zY1X%z$PF?Cz&)}@A_`dcNSbv~F`RdAEOCTkeIBzf;~5q=w8-a%s&OLKA(yO>dNl)Y
zlK0bSrm7V}>D14#&cK>|Jw8-{z@Yg=ZbjDfLydg4?J-%Ujy+Fx{F|QqZ=kFx2V1=p
zq=qJQB46M>ElOv#3u|PROqPaXIHaG;Xfq;q7v)a#Cp%}jbqy1pOKjH=yDMyNzwCHj
z-P!x8M^h@r+9%hJxJO|cD_7v}Nl1`t1DPk#*!BZ%>aVz`-=65^Xv-w}C6r9XaBUw)
ztT+tJ^LLO{+bL!TS)D(XopB4ir|k6rf6@)vEW>-eoA2`{Uk?ma>qW08`bVCFG$_G*
z57NjByc+vm`_*1_T8E_`81peb25<>kUCF_(QP>B7iV`u;y$MsAIjq3Fu0nvzEpWRc
z7?6OAI~}`F?WhjW$Uo2{_$F+
zw6F2hEquvk^mvhd+w3Pjb(c0N|LM)q9Jxf*Hc$0po{SM60DfL);kIX>P@*k~RNY4)
zGgidRD0%&cKN$ik+9zUqUHD%`Q;U*I@xf2`ot$7w%!A;DI+e5?4;KG>7cA-@y+7^w
z+_&Yeh-vrMQX>lMoqAiXcWNcxR+TlwKX%A6RZWj275}%IPOZRg*Fh9^*$}D55U-Y-
zBBr$qRIYUzc0ZNO&ljZ3ZxUkn>Dl0L6xFr47I=ARRJdwsO;LWmm|4bY2KOPCDfO`y
zCgyng+Pz0Z>ZkQX>gCI23@fTva|FejFb(`Z4d==j@4>$vRCioG
z3$MKm@m{xpptnFs3igYc(bKxf#ZAWx;BKo(tXib2CRXf(t(Wc?Is$36wX)7){|D
zb6ENFsAO|%fdPjUc3bpOj``
zw5gqnLP5&YkdqTeDNh$?VzfK$2OzER%Cpb2Gq;h*2OD~}d_4WLu83L7#*hB#vFdJ7
z4}TJIH2diA0-RWZqd*AZW(Gm8as_|JVI$r*OgX&-EKY-Cy<146&W(*xPA@lQ;b=}N
zJjP0i`FabB)&l4};aR84;EjgFd;u{03qRT*e**1yGe*X+J)4!bfxMBd+)E-8Uqy;r
z;&1)kaRfbLyW~i#@)Xl04S(#YvcZwI)vhP}+Ze6MrEw!qwN*2eckmZBb+E4MK%!z8
zkYcGpzZPn6&(3hB=%%=h2^3vz_rdf606;d6UqPsCB<37VVQDtB
z#KLh382u$62I3(b^a0yvq-pTUiF_@ats*8$E2&PR7>#yHM#Cv4g1qw`I^*iV0RNZ;
zj=bOpQ%iOVqqU{>rp#F3$j*&K5$Uj=PtY$I%NQ=}fQ$!N%{nZUyZrxR@Uk~=Hc1P4
o4XRpGX1`1gB`2d$ymw}yqTE21xhTpJ{tzLLtv;OVTS8O+0GYf+*#H0l
diff --git a/app/Settings.cs b/app/Settings.cs
index 1ad9a984..e54b38ab 100644
--- a/app/Settings.cs
+++ b/app/Settings.cs
@@ -10,7 +10,6 @@ using GHelper.Peripherals;
using GHelper.Peripherals.Mouse;
using GHelper.UI;
using System.Diagnostics;
-using System.Drawing.Imaging;
using System.Timers;
namespace GHelper