From 1c849d4a91cb177438642ae07456507ae74d010a Mon Sep 17 00:00:00 2001 From: Charlie Jiang Date: Sun, 7 Aug 2022 22:50:39 +0800 Subject: [PATCH] Use using blocks instead of `Dispose` call --- FrmLyrics.cs | 2 -- LyricsRenderer.cs | 75 ++++++++++++++++++++++++++--------------------- 2 files changed, 42 insertions(+), 35 deletions(-) diff --git a/FrmLyrics.cs b/FrmLyrics.cs index a18d8cc..54828fe 100644 --- a/FrmLyrics.cs +++ b/FrmLyrics.cs @@ -105,7 +105,6 @@ public void DrawLyrics1Line(string lyrics) if (Height != bitmap.Height) Height = bitmap.Height; GdiplusHelper.SetBitmap(bitmap, 255, Handle, Left, Top, Width, Height); - bitmap.Dispose(); } } } @@ -125,7 +124,6 @@ public void DrawLyrics2Line(string line1, string line2) if (Height != bitmap.Height) Height = bitmap.Height; GdiplusHelper.SetBitmap(bitmap, 255, Handle, Left, Top, Width, Height); - bitmap.Dispose(); } } } diff --git a/LyricsRenderer.cs b/LyricsRenderer.cs index d08f046..c952634 100644 --- a/LyricsRenderer.cs +++ b/LyricsRenderer.cs @@ -54,16 +54,17 @@ public static Bitmap Render1LineLyrics(string line1, IDeviceContext dc) public static Bitmap Render2LineLyrics(string line1, string line2, IDeviceContext dc) { - var line1Bitmap = RenderLyrics(line1, _mainFont, dc); - var line2Bitmap = RenderLyrics(line2, _subFont, dc); - var bitmap = new Bitmap(Math.Max(line1Bitmap.Width, line2Bitmap.Width), line1Bitmap.Height + line2Bitmap.Height); - var g = Graphics.FromImage(bitmap); - g.DrawImage(line1Bitmap, new PointF(0, 0)); - g.DrawImage(line2Bitmap, new PointF(0, line1Bitmap.Height * 0.9f)); - g.Dispose(); - line1Bitmap.Dispose(); - line2Bitmap.Dispose(); - return bitmap; + using (Bitmap line1Bitmap = RenderLyrics(line1, _mainFont, dc), + line2Bitmap = RenderLyrics(line2, _subFont, dc)) + { + var bitmap = new Bitmap(Math.Max(line1Bitmap.Width, line2Bitmap.Width), line1Bitmap.Height + line2Bitmap.Height); + using (var g = Graphics.FromImage(bitmap)) + { + g.DrawImage(line1Bitmap, new PointF(0, 0)); + g.DrawImage(line2Bitmap, new PointF(0, line1Bitmap.Height * 0.9f)); + } + return bitmap; + } } public static Bitmap RenderLyrics(string lyric, Font font, IDeviceContext dc) @@ -76,35 +77,43 @@ public static Bitmap RenderLyrics(string lyric, Font font, IDeviceContext dc) if (height <= 0) height = 1; var bitmap = new Bitmap(_width, height); bitmap.SetResolution(_dpi, _dpi); - var g = Graphics.FromImage(bitmap); - g.InterpolationMode = InterpolationMode.High; - g.SmoothingMode = SmoothingMode.AntiAlias; - g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; - g.CompositingQuality = CompositingQuality.HighQuality; + using (var g = Graphics.FromImage(bitmap)) + { + g.InterpolationMode = InterpolationMode.High; + g.SmoothingMode = SmoothingMode.AntiAlias; + g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; + g.CompositingQuality = CompositingQuality.HighQuality; + + var fontEmSize = font.SizeInPoints * _dpi / 72; + + var initialRect = new RectangleF(0, 0, _width, height); + using (var stringPath = new GraphicsPath(FillMode.Alternate)) + { + stringPath.AddString(lyric, font.FontFamily, (int)font.Style, fontEmSize, initialRect, Format); - float fontEmSize = font.SizeInPoints * _dpi / 72; + // Using matrix to translate the path + using (var mat = new Matrix()) + { + mat.Translate(-ShadowOffset, -ShadowOffset); + stringPath.Transform(mat); - var initialRect = new RectangleF(0, 0, _width, height); - var stringPath = new GraphicsPath(FillMode.Alternate); - stringPath.AddString(lyric, font.FontFamily, (int)font.Style, fontEmSize, initialRect, Format); + g.FillPath(ShadowBrush, stringPath); - var mat = new Matrix(); - mat.Translate(-ShadowOffset, -ShadowOffset); - stringPath.Transform(mat); + mat.Translate(ShadowOffset * 2, ShadowOffset * 2); + stringPath.Transform(mat); + } - g.FillPath(ShadowBrush, stringPath); - mat.Translate(ShadowOffset * 2, ShadowOffset * 2); - stringPath.Transform(mat); + if (_borderPen != null) + g.DrawPath(_borderPen, stringPath); - if (_borderPen != null) - g.DrawPath(_borderPen, stringPath); - var stringBrush = CreateGradientBrush(initialRect); - g.FillPath(stringBrush, stringPath); - //g.DrawString(lyric, _mainFont, stringBrush, dstRect); - g.Dispose(); - stringBrush.Dispose(); - stringPath.Dispose(); + using (var stringBrush = CreateGradientBrush(initialRect)) + { + g.FillPath(stringBrush, stringPath); + } + } + } + return bitmap; }