Matrix memory optimisations

This commit is contained in:
Serge
2023-09-05 23:51:14 +02:00
parent c34ba9c620
commit cff47002e1
3 changed files with 49 additions and 25 deletions

View File

@@ -26,8 +26,6 @@ namespace GHelper.AnimeMatrix
private long lastPresent; private long lastPresent;
private List<double> maxes = new List<double>(); private List<double> maxes = new List<double>();
private MemoryStream ms = new MemoryStream();
public AniMatrixControl(SettingsForm settingsForm) public AniMatrixControl(SettingsForm settingsForm)
{ {
settings = settingsForm; settings = settingsForm;
@@ -317,18 +315,21 @@ namespace GHelper.AnimeMatrix
try try
{ {
using (var fs = new FileStream(fileName, FileMode.Open)) using (var fs = new FileStream(fileName, FileMode.Open))
//using (var ms = new MemoryStream())
{ {
/*
ms.SetLength(0); ms.SetLength(0);
fs.CopyTo(ms); fs.CopyTo(ms);
ms.Position = 0; ms.Position = 0;
*/
using (Image image = Image.FromStream(ms)) using (Image image = Image.FromStream(fs))
{ {
ProcessPicture(image); ProcessPicture(image);
Logger.WriteLine("Matrix " + fileName); Logger.WriteLine("Matrix " + fileName);
if (visualise) settings.VisualiseMatrix(image);
} }
fs.Close();
if (visualise) settings.VisualiseMatrix(fileName);
} }
} }
catch catch
@@ -347,6 +348,8 @@ namespace GHelper.AnimeMatrix
int matrixX = AppConfig.Get("matrix_x", 0); int matrixX = AppConfig.Get("matrix_x", 0);
int matrixY = AppConfig.Get("matrix_y", 0); int matrixY = AppConfig.Get("matrix_y", 0);
int matrixZoom = AppConfig.Get("matrix_zoom", 100); int matrixZoom = AppConfig.Get("matrix_zoom", 100);
int matrixSpeed = AppConfig.Get("matrix_speed", 50);
InterpolationMode matrixQuality = (InterpolationMode)AppConfig.Get("matrix_quality", 0); InterpolationMode matrixQuality = (InterpolationMode)AppConfig.Get("matrix_quality", 0);
@@ -367,7 +370,7 @@ namespace GHelper.AnimeMatrix
Logger.WriteLine("GIF Delay:" + frameDelay); Logger.WriteLine("GIF Delay:" + frameDelay);
StartMatrixTimer(Math.Max(50, frameDelay)); StartMatrixTimer(Math.Max(matrixSpeed, frameDelay));
//image.SelectActiveFrame(dimension, 0); //image.SelectActiveFrame(dimension, 0);

View File

@@ -17,6 +17,9 @@ namespace GHelper
private float uiScale; private float uiScale;
Image picture;
MemoryStream ms = new MemoryStream();
public Matrix() public Matrix()
{ {
InitializeComponent(); InitializeComponent();
@@ -55,9 +58,11 @@ namespace GHelper
private void Matrix_FormClosed(object? sender, FormClosingEventArgs e) private void Matrix_FormClosed(object? sender, FormClosingEventArgs e)
{ {
if (pictureMatrix.Image is not null) pictureMatrix.Image.Dispose(); if (picture is not null) picture.Dispose();
if (ms is not null) ms.Dispose();
pictureMatrix.Dispose(); pictureMatrix.Dispose();
Dispose();
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced); GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
} }
@@ -157,32 +162,48 @@ namespace GHelper
Left = Program.settingsForm.Left - Width - 5; Left = Program.settingsForm.Left - Width - 5;
} }
public void VisualiseMatrix(Image picture) public void VisualiseMatrix(string fileName)
{ {
if (pictureMatrix.Image is not null) pictureMatrix.Image.Dispose(); if (picture is not null) picture.Dispose();
int width = picture.Width; using (var fs = new FileStream(fileName, FileMode.Open))
int height = picture.Height; {
int matrixX = AppConfig.Get("matrix_x", 0); ms.SetLength(0);
int matrixY = AppConfig.Get("matrix_y", 0); fs.CopyTo(ms);
int matrixZoom = AppConfig.Get("matrix_zoom", 100); ms.Position = 0;
fs.Close();
picture = Image.FromStream(ms);
int width = picture.Width;
int height = picture.Height;
int matrixX = AppConfig.Get("matrix_x", 0);
int matrixY = AppConfig.Get("matrix_y", 0);
int matrixZoom = AppConfig.Get("matrix_zoom", 100);
float scale = Math.Min((float)panelPicture.Width / (float)width, (float)panelPicture.Height / (float)height) * matrixZoom / 100; float scale = Math.Min((float)panelPicture.Width / (float)width, (float)panelPicture.Height / (float)height) * matrixZoom / 100;
pictureMatrix.Width = (int)(width * scale); pictureMatrix.Width = (int)(width * scale);
pictureMatrix.Height = (int)(height * scale); pictureMatrix.Height = (int)(height * scale);
baseX = panelPicture.Width - pictureMatrix.Width;
baseY = 0;
pictureMatrix.Left = baseX - (int)(matrixX * uiScale);
pictureMatrix.Top = baseY - (int)(matrixY * uiScale);
pictureMatrix.SizeMode = PictureBoxSizeMode.Zoom;
pictureMatrix.Image = picture;
}
baseX = panelPicture.Width - pictureMatrix.Width;
baseY = 0;
pictureMatrix.Left = baseX - (int)(matrixX * uiScale);
pictureMatrix.Top = baseY - (int)(matrixY * uiScale);
pictureMatrix.SizeMode = PictureBoxSizeMode.Zoom;
pictureMatrix.Image = (Image)picture.Clone();
} }

View File

@@ -271,7 +271,7 @@ namespace GHelper
} }
} }
public void VisualiseMatrix(Image image) public void VisualiseMatrix(string image)
{ {
if (matrix == null || matrix.Text == "") return; if (matrix == null || matrix.Text == "") return;
matrix.VisualiseMatrix(image); matrix.VisualiseMatrix(image);