diff --git a/ShareX.MediaLib/Forms/ImageBeautifierForm.Designer.cs b/ShareX.MediaLib/Forms/ImageBeautifierForm.Designer.cs index 1cb542d16..ac458e47f 100644 --- a/ShareX.MediaLib/Forms/ImageBeautifierForm.Designer.cs +++ b/ShareX.MediaLib/Forms/ImageBeautifierForm.Designer.cs @@ -7,19 +7,6 @@ partial class ImageBeautifierForm /// private System.ComponentModel.IContainer components = null; - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - #region Windows Form Designer generated code /// @@ -46,8 +33,8 @@ private void InitializeComponent() this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); this.pbPreview = new ShareX.HelpersLib.MyPictureBox(); this.pOptions = new System.Windows.Forms.Panel(); - this.gbShadow = new System.Windows.Forms.GroupBox(); this.btnShadowExpand = new System.Windows.Forms.Button(); + this.gbShadow = new System.Windows.Forms.GroupBox(); this.lblShadowAngleValue = new System.Windows.Forms.Label(); this.lblShadowDistanceValue = new System.Windows.Forms.Label(); this.lblShadowOpacityValue = new System.Windows.Forms.Label(); @@ -185,7 +172,7 @@ private void InitializeComponent() // lblBackground // this.lblBackground.AutoSize = true; - this.lblBackground.Location = new System.Drawing.Point(13, 376); + this.lblBackground.Location = new System.Drawing.Point(13, 384); this.lblBackground.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblBackground.Name = "lblBackground"; this.lblBackground.Size = new System.Drawing.Size(80, 17); @@ -194,40 +181,40 @@ private void InitializeComponent() // // lblMarginValue // - this.lblMarginValue.Location = new System.Drawing.Point(272, 16); + this.lblMarginValue.Location = new System.Drawing.Point(256, 16); this.lblMarginValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblMarginValue.Name = "lblMarginValue"; - this.lblMarginValue.Size = new System.Drawing.Size(40, 24); + this.lblMarginValue.Size = new System.Drawing.Size(56, 24); this.lblMarginValue.TabIndex = 2; this.lblMarginValue.Text = "0"; this.lblMarginValue.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // lblPaddingValue // - this.lblPaddingValue.Location = new System.Drawing.Point(272, 88); + this.lblPaddingValue.Location = new System.Drawing.Point(256, 88); this.lblPaddingValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblPaddingValue.Name = "lblPaddingValue"; - this.lblPaddingValue.Size = new System.Drawing.Size(40, 24); + this.lblPaddingValue.Size = new System.Drawing.Size(56, 24); this.lblPaddingValue.TabIndex = 5; this.lblPaddingValue.Text = "0"; this.lblPaddingValue.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // lblRoundedCornerValue // - this.lblRoundedCornerValue.Location = new System.Drawing.Point(272, 192); + this.lblRoundedCornerValue.Location = new System.Drawing.Point(256, 192); this.lblRoundedCornerValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblRoundedCornerValue.Name = "lblRoundedCornerValue"; - this.lblRoundedCornerValue.Size = new System.Drawing.Size(40, 24); + this.lblRoundedCornerValue.Size = new System.Drawing.Size(56, 24); this.lblRoundedCornerValue.TabIndex = 9; this.lblRoundedCornerValue.Text = "0"; this.lblRoundedCornerValue.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // lblShadowRadiusValue // - this.lblShadowRadiusValue.Location = new System.Drawing.Point(256, 32); + this.lblShadowRadiusValue.Location = new System.Drawing.Point(240, 32); this.lblShadowRadiusValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblShadowRadiusValue.Name = "lblShadowRadiusValue"; - this.lblShadowRadiusValue.Size = new System.Drawing.Size(40, 24); + this.lblShadowRadiusValue.Size = new System.Drawing.Size(56, 24); this.lblShadowRadiusValue.TabIndex = 12; this.lblShadowRadiusValue.Text = "0"; this.lblShadowRadiusValue.TextAlign = System.Drawing.ContentAlignment.MiddleRight; @@ -293,6 +280,17 @@ private void InitializeComponent() this.pOptions.Size = new System.Drawing.Size(329, 755); this.pOptions.TabIndex = 0; // + // btnShadowExpand + // + this.btnShadowExpand.Image = global::ShareX.MediaLib.Properties.Resources.plus_white; + this.btnShadowExpand.Location = new System.Drawing.Point(280, 260); + this.btnShadowExpand.Name = "btnShadowExpand"; + this.btnShadowExpand.Size = new System.Drawing.Size(30, 30); + this.btnShadowExpand.TabIndex = 16; + this.btnShadowExpand.Tag = "+"; + this.btnShadowExpand.UseVisualStyleBackColor = true; + this.btnShadowExpand.Click += new System.EventHandler(this.btnShadowExpand_Click); + // // gbShadow // this.gbShadow.Controls.Add(this.lblShadowAngleValue); @@ -315,43 +313,32 @@ private void InitializeComponent() this.gbShadow.TabStop = false; this.gbShadow.Text = "Shadow"; // - // btnShadowExpand - // - this.btnShadowExpand.Image = global::ShareX.MediaLib.Properties.Resources.plus_white; - this.btnShadowExpand.Location = new System.Drawing.Point(280, 260); - this.btnShadowExpand.Name = "btnShadowExpand"; - this.btnShadowExpand.Size = new System.Drawing.Size(30, 30); - this.btnShadowExpand.TabIndex = 16; - this.btnShadowExpand.Tag = "+"; - this.btnShadowExpand.UseVisualStyleBackColor = true; - this.btnShadowExpand.Click += new System.EventHandler(this.btnShadowExpand_Click); - // // lblShadowAngleValue // - this.lblShadowAngleValue.Location = new System.Drawing.Point(256, 248); + this.lblShadowAngleValue.Location = new System.Drawing.Point(240, 248); this.lblShadowAngleValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblShadowAngleValue.Name = "lblShadowAngleValue"; - this.lblShadowAngleValue.Size = new System.Drawing.Size(40, 24); + this.lblShadowAngleValue.Size = new System.Drawing.Size(56, 24); this.lblShadowAngleValue.TabIndex = 15; this.lblShadowAngleValue.Text = "0"; this.lblShadowAngleValue.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // lblShadowDistanceValue // - this.lblShadowDistanceValue.Location = new System.Drawing.Point(256, 176); + this.lblShadowDistanceValue.Location = new System.Drawing.Point(240, 176); this.lblShadowDistanceValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblShadowDistanceValue.Name = "lblShadowDistanceValue"; - this.lblShadowDistanceValue.Size = new System.Drawing.Size(40, 24); + this.lblShadowDistanceValue.Size = new System.Drawing.Size(56, 24); this.lblShadowDistanceValue.TabIndex = 14; this.lblShadowDistanceValue.Text = "0"; this.lblShadowDistanceValue.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // lblShadowOpacityValue // - this.lblShadowOpacityValue.Location = new System.Drawing.Point(256, 104); + this.lblShadowOpacityValue.Location = new System.Drawing.Point(240, 104); this.lblShadowOpacityValue.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblShadowOpacityValue.Name = "lblShadowOpacityValue"; - this.lblShadowOpacityValue.Size = new System.Drawing.Size(40, 24); + this.lblShadowOpacityValue.Size = new System.Drawing.Size(56, 24); this.lblShadowOpacityValue.TabIndex = 13; this.lblShadowOpacityValue.Text = "0"; this.lblShadowOpacityValue.TextAlign = System.Drawing.ContentAlignment.MiddleRight; @@ -441,14 +428,14 @@ private void InitializeComponent() // // lblBackgroundImageFilePath // - this.lblBackgroundImageFilePath.Location = new System.Drawing.Point(13, 472); + this.lblBackgroundImageFilePath.Location = new System.Drawing.Point(13, 480); this.lblBackgroundImageFilePath.Name = "lblBackgroundImageFilePath"; this.lblBackgroundImageFilePath.Size = new System.Drawing.Size(296, 120); this.lblBackgroundImageFilePath.TabIndex = 22; // // btnBackgroundImageFilePathBrowse // - this.btnBackgroundImageFilePathBrowse.Location = new System.Drawing.Point(16, 432); + this.btnBackgroundImageFilePathBrowse.Location = new System.Drawing.Point(16, 440); this.btnBackgroundImageFilePathBrowse.Name = "btnBackgroundImageFilePathBrowse"; this.btnBackgroundImageFilePathBrowse.Size = new System.Drawing.Size(296, 32); this.btnBackgroundImageFilePathBrowse.TabIndex = 21; @@ -460,7 +447,7 @@ private void InitializeComponent() // this.cbBackgroundType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cbBackgroundType.FormattingEnabled = true; - this.cbBackgroundType.Location = new System.Drawing.Point(16, 400); + this.cbBackgroundType.Location = new System.Drawing.Point(16, 408); this.cbBackgroundType.Name = "cbBackgroundType"; this.cbBackgroundType.Size = new System.Drawing.Size(296, 25); this.cbBackgroundType.TabIndex = 19; @@ -529,7 +516,7 @@ private void InitializeComponent() // pbBackground // this.pbBackground.Cursor = System.Windows.Forms.Cursors.Hand; - this.pbBackground.Location = new System.Drawing.Point(16, 432); + this.pbBackground.Location = new System.Drawing.Point(16, 440); this.pbBackground.Name = "pbBackground"; this.pbBackground.Size = new System.Drawing.Size(296, 40); this.pbBackground.TabIndex = 14; diff --git a/ShareX.MediaLib/Forms/ImageBeautifierForm.cs b/ShareX.MediaLib/Forms/ImageBeautifierForm.cs index 4fb7cc320..5ae356304 100644 --- a/ShareX.MediaLib/Forms/ImageBeautifierForm.cs +++ b/ShareX.MediaLib/Forms/ImageBeautifierForm.cs @@ -59,7 +59,6 @@ private ImageBeautifierForm(ImageBeautifierOptions options = null) InitializeComponent(); ShareXResources.ApplyTheme(this, true); title = Text; - imageBeautifier = new ImageBeautifier(Options); LoadOptions(); } @@ -75,6 +74,19 @@ public ImageBeautifierForm(string filePath, ImageBeautifierOptions options = nul SourceImage = ImageHelpers.LoadImage(filePath); } + protected override void Dispose(bool disposing) + { + if (disposing) + { + components?.Dispose(); + SourceImage?.Dispose(); + PreviewImage?.Dispose(); + imageBeautifier?.Dispose(); + } + + base.Dispose(disposing); + } + private void LoadOptions() { isReady = false; @@ -170,8 +182,18 @@ private async Task UpdatePreview(bool quickRender = false) options.ShadowRadius = 0; } + if (imageBeautifier == null) + { + imageBeautifier = new ImageBeautifier(SourceImage, Options); + + if (imageBeautifier.SourceImageCropped == null) + { + cbSmartPadding.Enabled = false; + } + } + Stopwatch renderTime = Stopwatch.StartNew(); - Bitmap resultImage = await imageBeautifier.RenderAsync(SourceImage); + Bitmap resultImage = await imageBeautifier.RenderAsync(); renderTime.Stop(); if (IsDisposed) diff --git a/ShareX.MediaLib/ImageBeautifier.cs b/ShareX.MediaLib/ImageBeautifier.cs index 128035753..cdd77bea3 100644 --- a/ShareX.MediaLib/ImageBeautifier.cs +++ b/ShareX.MediaLib/ImageBeautifier.cs @@ -24,33 +24,68 @@ #endregion License Information (GPL v3) using ShareX.HelpersLib; +using System; using System.Drawing; using System.Threading.Tasks; using System.Windows.Forms; namespace ShareX.MediaLib { - public class ImageBeautifier + public class ImageBeautifier : IDisposable { public ImageBeautifierOptions Options { get; private set; } + public Bitmap SourceImage { get; private set; } + public Bitmap SourceImageCropped { get; private set; } + public Color PaddingColor { get; private set; } public ImageBeautifier(ImageBeautifierOptions options) { Options = options; } - public Bitmap Render(Bitmap image) + public ImageBeautifier(Bitmap image, ImageBeautifierOptions options) : this(options) { - Bitmap resultImage = (Bitmap)image.Clone(); + LoadImage(image); + } - if (Options.SmartPadding) + public void Dispose() + { + SourceImage?.Dispose(); + SourceImageCropped?.Dispose(); + } + + public void LoadImage(Bitmap image) + { + SourceImage = (Bitmap)image.Clone(); + SourceImageCropped = null; + + Rectangle source = new Rectangle(0, 0, image.Width, image.Height); + Rectangle rect = ImageHelpers.FindAutoCropRectangle(image, true, AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right); + + if (source != rect) { - resultImage = ImageHelpers.AutoCropImage(resultImage, true, AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right, Options.Padding); + SourceImageCropped = ImageHelpers.CropBitmap(image, rect); } - else if (Options.Padding > 0) + + PaddingColor = image.GetPixel(0, 0); + } + + public Bitmap Render() + { + Bitmap resultImage; + + if (Options.SmartPadding && SourceImageCropped != null) { - Color color = resultImage.GetPixel(0, 0); - Bitmap resultImageNew = ImageHelpers.AddCanvas(resultImage, Options.Padding, color); + resultImage = (Bitmap)SourceImageCropped.Clone(); + } + else + { + resultImage = (Bitmap)SourceImage.Clone(); + } + + if (Options.Padding > 0) + { + Bitmap resultImageNew = ImageHelpers.AddCanvas(resultImage, Options.Padding, PaddingColor); resultImage.Dispose(); resultImage = resultImageNew; } @@ -107,9 +142,9 @@ public Bitmap Render(Bitmap image) return resultImage; } - public async Task RenderAsync(Bitmap image) + public async Task RenderAsync() { - return await Task.Run(() => Render(image)); + return await Task.Run(Render); } } } \ No newline at end of file