From 6af7de1a221ab5ab848cca85fdb2c4292ace4966 Mon Sep 17 00:00:00 2001 From: Jaex Date: Sat, 8 Oct 2022 12:38:08 +0300 Subject: [PATCH 1/3] Added WrapAfter option to CombineImages function --- ShareX.HelpersLib/Helpers/ImageHelpers.cs | 146 ++++++++++++--------- ShareX.MediaLib/Forms/ImageCombinerForm.cs | 3 +- ShareX.MediaLib/ImageCombinerOptions.cs | 1 + ShareX/TaskHelpers.cs | 3 +- 4 files changed, 92 insertions(+), 61 deletions(-) diff --git a/ShareX.HelpersLib/Helpers/ImageHelpers.cs b/ShareX.HelpersLib/Helpers/ImageHelpers.cs index 6acfc364b..f98b9653c 100644 --- a/ShareX.HelpersLib/Helpers/ImageHelpers.cs +++ b/ShareX.HelpersLib/Helpers/ImageHelpers.cs @@ -2100,31 +2100,101 @@ public static Bitmap LoadImageWithFileDialog(Form form = null) } public static Bitmap CombineImages(List images, Orientation orientation, ImageCombinerAlignment alignment = ImageCombinerAlignment.LeftOrTop, - int space = 0, bool autoFillBackground = false) + int space = 0, int wrapAfter = 0, bool autoFillBackground = false) { - int width, height; int imageCount = images.Count; - int spaceSize = space * (imageCount - 1); + Rectangle[] imageRects = new Rectangle[imageCount]; + Point position = new Point(0, 0); + int currentSize = 0; - if (orientation == Orientation.Horizontal) + for (int i = 0; i < imageCount; i++) { - width = images.Sum(x => x.Width) + spaceSize; - height = images.Max(x => x.Height); - } - else - { - width = images.Max(x => x.Width); - height = images.Sum(x => x.Height) + spaceSize; + Bitmap image = images[i]; + Point offset = new Point(0, 0); + + if (orientation == Orientation.Horizontal) + { + if (wrapAfter > 0) + { + if (i % wrapAfter == 0) + { + if (i > 0) + { + position.X = 0; + position.Y += currentSize + space; + } + + currentSize = images.Skip(i).Take(wrapAfter).Max(x => x.Height); + } + } + else if (i == 0) + { + currentSize = images.Max(x => x.Height); + } + + switch (alignment) + { + default: + case ImageCombinerAlignment.LeftOrTop: + offset.Y = 0; + break; + case ImageCombinerAlignment.Center: + offset.Y = (currentSize / 2) - (image.Height / 2); + break; + case ImageCombinerAlignment.RightOrBottom: + offset.Y = currentSize - image.Height; + break; + } + + imageRects[i] = new Rectangle(position.X + offset.X, position.Y + offset.Y, image.Width, image.Height); + position.X += image.Width + space; + } + else + { + if (wrapAfter > 0) + { + if (i % wrapAfter == 0) + { + if (i > 0) + { + position.X += currentSize + space; + position.Y = 0; + } + + currentSize = images.Skip(i).Take(wrapAfter).Max(x => x.Width); + } + } + else if (i == 0) + { + currentSize = images.Max(x => x.Width); + } + + switch (alignment) + { + default: + case ImageCombinerAlignment.LeftOrTop: + offset.X = 0; + break; + case ImageCombinerAlignment.Center: + offset.X = (currentSize / 2) - (image.Width / 2); + break; + case ImageCombinerAlignment.RightOrBottom: + offset.X = currentSize - image.Width; + break; + } + + imageRects[i] = new Rectangle(position.X + offset.X, position.Y + offset.Y, image.Width, image.Height); + position.Y += image.Height + space; + } } - Bitmap bmp = new Bitmap(width, height); + Rectangle totalImageRect = imageRects.Combine(); + Bitmap bmp = new Bitmap(totalImageRect.Width, totalImageRect.Height); using (Graphics g = Graphics.FromImage(bmp)) { g.SetHighQuality(); - Point position = new Point(0, 0); - for (int i = 0; i < imageCount; i++) { Bitmap image = images[i]; @@ -2135,49 +2205,7 @@ public static Bitmap LoadImageWithFileDialog(Form form = null) g.Clear(backgroundColor); } - Rectangle rect; - Point offset = new Point(0, 0); - - if (orientation == Orientation.Horizontal) - { - switch (alignment) - { - default: - case ImageCombinerAlignment.LeftOrTop: - offset.Y = 0; - break; - case ImageCombinerAlignment.Center: - offset.Y = (height / 2) - (image.Height / 2); - break; - case ImageCombinerAlignment.RightOrBottom: - offset.Y = height - image.Height; - break; - } - - rect = new Rectangle(position.X + offset.X, position.Y + offset.Y, image.Width, image.Height); - position.X += image.Width + space; - } - else - { - switch (alignment) - { - default: - case ImageCombinerAlignment.LeftOrTop: - offset.X = 0; - break; - case ImageCombinerAlignment.Center: - offset.X = (width / 2) - (image.Width / 2); - break; - case ImageCombinerAlignment.RightOrBottom: - offset.X = width - image.Width; - break; - } - - rect = new Rectangle(position.X + offset.X, position.Y + offset.Y, image.Width, image.Height); - position.Y += image.Height + space; - } - - g.DrawImage(image, rect); + g.DrawImage(image, imageRects[i]); } } @@ -2185,7 +2213,7 @@ public static Bitmap LoadImageWithFileDialog(Form form = null) } public static Bitmap CombineImages(IEnumerable imageFiles, Orientation orientation, ImageCombinerAlignment alignment = ImageCombinerAlignment.LeftOrTop, - int space = 0, bool autoFillBackground = false) + int space = 0, int wrapAfter = 0, bool autoFillBackground = false) { List images = new List(); @@ -2203,7 +2231,7 @@ public static Bitmap LoadImageWithFileDialog(Form form = null) if (images.Count > 1) { - return CombineImages(images, orientation, alignment, space, autoFillBackground); + return CombineImages(images, orientation, alignment, space, wrapAfter, autoFillBackground); } } finally diff --git a/ShareX.MediaLib/Forms/ImageCombinerForm.cs b/ShareX.MediaLib/Forms/ImageCombinerForm.cs index 62c8d8fa9..009b5ba75 100644 --- a/ShareX.MediaLib/Forms/ImageCombinerForm.cs +++ b/ShareX.MediaLib/Forms/ImageCombinerForm.cs @@ -180,7 +180,8 @@ private void btnCombine_Click(object sender, EventArgs e) if (imageFiles.Count > 1) { - Bitmap output = ImageHelpers.CombineImages(imageFiles, Options.Orientation, Options.Alignment, Options.Space, Options.AutoFillBackground); + Bitmap output = ImageHelpers.CombineImages(imageFiles, Options.Orientation, Options.Alignment, Options.Space, Options.WrapAfter, + Options.AutoFillBackground); if (output != null) { diff --git a/ShareX.MediaLib/ImageCombinerOptions.cs b/ShareX.MediaLib/ImageCombinerOptions.cs index 8d77a8eb5..717805680 100644 --- a/ShareX.MediaLib/ImageCombinerOptions.cs +++ b/ShareX.MediaLib/ImageCombinerOptions.cs @@ -33,6 +33,7 @@ public class ImageCombinerOptions public Orientation Orientation { get; set; } = Orientation.Vertical; public ImageCombinerAlignment Alignment { get; set; } = ImageCombinerAlignment.LeftOrTop; public int Space { get; set; } = 0; + public int WrapAfter { get; set; } = 0; public bool AutoFillBackground { get; set; } = true; } } \ No newline at end of file diff --git a/ShareX/TaskHelpers.cs b/ShareX/TaskHelpers.cs index d63bf8430..81e378549 100644 --- a/ShareX/TaskHelpers.cs +++ b/ShareX/TaskHelpers.cs @@ -833,7 +833,8 @@ public static void CombineImages(IEnumerable imageFiles, Orientation ori if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings(); Bitmap output = ImageHelpers.CombineImages(imageFiles, orientation, taskSettings.ToolsSettings.ImageCombinerOptions.Alignment, - taskSettings.ToolsSettings.ImageCombinerOptions.Space, taskSettings.ToolsSettings.ImageCombinerOptions.AutoFillBackground); + taskSettings.ToolsSettings.ImageCombinerOptions.Space, taskSettings.ToolsSettings.ImageCombinerOptions.WrapAfter, + taskSettings.ToolsSettings.ImageCombinerOptions.AutoFillBackground); if (output != null) { From 58dce8e3098225ae6da48b0d7444ca3b52fb4733 Mon Sep 17 00:00:00 2001 From: Jaex Date: Sun, 9 Oct 2022 13:14:23 +0300 Subject: [PATCH 2/3] Added WrapAfter option to ImageCombinerForm --- .../Forms/ImageCombinerForm.Designer.cs | 32 +++++ ShareX.MediaLib/Forms/ImageCombinerForm.cs | 6 + ShareX.MediaLib/Forms/ImageCombinerForm.resx | 135 ++++++++++++++---- 3 files changed, 149 insertions(+), 24 deletions(-) diff --git a/ShareX.MediaLib/Forms/ImageCombinerForm.Designer.cs b/ShareX.MediaLib/Forms/ImageCombinerForm.Designer.cs index ba0cb7b68..4319a4ebd 100644 --- a/ShareX.MediaLib/Forms/ImageCombinerForm.Designer.cs +++ b/ShareX.MediaLib/Forms/ImageCombinerForm.Designer.cs @@ -46,8 +46,12 @@ private void InitializeComponent() this.rbOrientationHorizontal = new System.Windows.Forms.RadioButton(); this.rbOrientationVertical = new System.Windows.Forms.RadioButton(); this.cbAutoFillBackground = new System.Windows.Forms.CheckBox(); + this.lblWrapAfter = new System.Windows.Forms.Label(); + this.nudWrapAfter = new System.Windows.Forms.NumericUpDown(); + this.lblWrapAfterImages = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.nudSpace)).BeginInit(); this.flpOrientation.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudWrapAfter)).BeginInit(); this.SuspendLayout(); // // btnAdd @@ -175,6 +179,27 @@ private void InitializeComponent() this.cbAutoFillBackground.UseVisualStyleBackColor = true; this.cbAutoFillBackground.CheckedChanged += new System.EventHandler(this.cbAutoFillBackground_CheckedChanged); // + // lblWrapAfter + // + resources.ApplyResources(this.lblWrapAfter, "lblWrapAfter"); + this.lblWrapAfter.Name = "lblWrapAfter"; + // + // nudWrapAfter + // + resources.ApplyResources(this.nudWrapAfter, "nudWrapAfter"); + this.nudWrapAfter.Maximum = new decimal(new int[] { + 1000, + 0, + 0, + 0}); + this.nudWrapAfter.Name = "nudWrapAfter"; + this.nudWrapAfter.ValueChanged += new System.EventHandler(this.nudWrapAfter_ValueChanged); + // + // lblWrapAfterImages + // + resources.ApplyResources(this.lblWrapAfterImages, "lblWrapAfterImages"); + this.lblWrapAfterImages.Name = "lblWrapAfterImages"; + // // ImageCombinerForm // this.AcceptButton = this.btnCombine; @@ -182,6 +207,9 @@ private void InitializeComponent() resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; this.BackColor = System.Drawing.SystemColors.Window; + this.Controls.Add(this.lblWrapAfterImages); + this.Controls.Add(this.nudWrapAfter); + this.Controls.Add(this.lblWrapAfter); this.Controls.Add(this.cbAutoFillBackground); this.Controls.Add(this.flpOrientation); this.Controls.Add(this.cbAlignment); @@ -202,6 +230,7 @@ private void InitializeComponent() ((System.ComponentModel.ISupportInitialize)(this.nudSpace)).EndInit(); this.flpOrientation.ResumeLayout(false); this.flpOrientation.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudWrapAfter)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -226,5 +255,8 @@ private void InitializeComponent() private System.Windows.Forms.RadioButton rbOrientationHorizontal; private System.Windows.Forms.RadioButton rbOrientationVertical; private System.Windows.Forms.CheckBox cbAutoFillBackground; + private System.Windows.Forms.Label lblWrapAfter; + private System.Windows.Forms.NumericUpDown nudWrapAfter; + private System.Windows.Forms.Label lblWrapAfterImages; } } \ No newline at end of file diff --git a/ShareX.MediaLib/Forms/ImageCombinerForm.cs b/ShareX.MediaLib/Forms/ImageCombinerForm.cs index 009b5ba75..cf637e9ab 100644 --- a/ShareX.MediaLib/Forms/ImageCombinerForm.cs +++ b/ShareX.MediaLib/Forms/ImageCombinerForm.cs @@ -57,6 +57,7 @@ public ImageCombinerForm(ImageCombinerOptions options) UpdateAlignmentComboBox(); nudSpace.SetValue(Options.Space); + nudWrapAfter.SetValue(Options.WrapAfter); cbAutoFillBackground.Checked = Options.AutoFillBackground; } @@ -165,6 +166,11 @@ private void nudSpace_ValueChanged(object sender, EventArgs e) Options.Space = (int)nudSpace.Value; } + private void nudWrapAfter_ValueChanged(object sender, EventArgs e) + { + Options.WrapAfter = (int)nudWrapAfter.Value; + } + private void cbAutoFillBackground_CheckedChanged(object sender, EventArgs e) { Options.AutoFillBackground = cbAutoFillBackground.Checked; diff --git a/ShareX.MediaLib/Forms/ImageCombinerForm.resx b/ShareX.MediaLib/Forms/ImageCombinerForm.resx index ff3710730..8e7f74d04 100644 --- a/ShareX.MediaLib/Forms/ImageCombinerForm.resx +++ b/ShareX.MediaLib/Forms/ImageCombinerForm.resx @@ -141,7 +141,7 @@ $this - 13 + 16 136, 8 @@ -165,7 +165,7 @@ $this - 12 + 15 264, 8 @@ -189,7 +189,7 @@ $this - 11 + 14 392, 8 @@ -213,7 +213,7 @@ $this - 10 + 13 @@ -229,7 +229,7 @@ 8, 40 - 504, 344 + 504, 320 4 @@ -238,13 +238,13 @@ lvImages - ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=13.7.2.0, Culture=neutral, PublicKeyToken=null + ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=14.1.3.0, Culture=neutral, PublicKeyToken=null $this - 9 + 12 Bottom, Left, Right @@ -256,7 +256,7 @@ 504, 31 - 13 + 16 Combine images and save/upload depending on after capture settings @@ -271,7 +271,7 @@ $this - 8 + 11 Bottom, Left @@ -280,7 +280,7 @@ True - 5, 448 + 5, 424 121, 13 @@ -301,13 +301,13 @@ $this - 7 + 10 Bottom, Left - 200, 444 + 200, 420 64, 20 @@ -328,7 +328,7 @@ $this - 6 + 9 Bottom, Left @@ -337,7 +337,7 @@ True - 5, 400 + 5, 376 103, 13 @@ -358,7 +358,7 @@ $this - 5 + 8 Bottom, Left @@ -367,7 +367,7 @@ True - 272, 448 + 272, 424 33, 13 @@ -388,7 +388,7 @@ $this - 4 + 7 Bottom, Left @@ -397,7 +397,7 @@ True - 5, 424 + 5, 400 87, 13 @@ -418,13 +418,13 @@ $this - 3 + 6 Bottom, Left - 200, 420 + 200, 396 120, 21 @@ -442,7 +442,7 @@ $this - 2 + 5 Bottom, Left @@ -508,7 +508,7 @@ 1 - 200, 395 + 200, 371 141, 23 @@ -526,7 +526,7 @@ $this - 1 + 4 Bottom, Left @@ -541,7 +541,7 @@ 120, 17 - 12 + 15 Auto fill background @@ -556,6 +556,93 @@ $this + 3 + + + Bottom, Left + + + True + + + 5, 448 + + + 60, 13 + + + 12 + + + Wrap after: + + + lblWrapAfter + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + Bottom, Left + + + 200, 444 + + + 64, 20 + + + 13 + + + Center + + + nudWrapAfter + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Bottom, Left + + + True + + + 272, 448 + + + 40, 13 + + + 14 + + + images + + + lblWrapAfterImages + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + 0 From eb6ac4e05eaaf3e1624c42ec37940683e0c27763 Mon Sep 17 00:00:00 2001 From: Jaex Date: Sun, 9 Oct 2022 13:52:38 +0300 Subject: [PATCH 3/3] Added image count --- .../Forms/ImageCombinerForm.Designer.cs | 8 + ShareX.MediaLib/Forms/ImageCombinerForm.cs | 30 ++-- ShareX.MediaLib/Forms/ImageCombinerForm.resx | 149 ++++++++++++------ 3 files changed, 130 insertions(+), 57 deletions(-) diff --git a/ShareX.MediaLib/Forms/ImageCombinerForm.Designer.cs b/ShareX.MediaLib/Forms/ImageCombinerForm.Designer.cs index 4319a4ebd..c5a906856 100644 --- a/ShareX.MediaLib/Forms/ImageCombinerForm.Designer.cs +++ b/ShareX.MediaLib/Forms/ImageCombinerForm.Designer.cs @@ -49,6 +49,7 @@ private void InitializeComponent() this.lblWrapAfter = new System.Windows.Forms.Label(); this.nudWrapAfter = new System.Windows.Forms.NumericUpDown(); this.lblWrapAfterImages = new System.Windows.Forms.Label(); + this.lblImageCount = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.nudSpace)).BeginInit(); this.flpOrientation.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.nudWrapAfter)).BeginInit(); @@ -200,6 +201,11 @@ private void InitializeComponent() resources.ApplyResources(this.lblWrapAfterImages, "lblWrapAfterImages"); this.lblWrapAfterImages.Name = "lblWrapAfterImages"; // + // lblImageCount + // + resources.ApplyResources(this.lblImageCount, "lblImageCount"); + this.lblImageCount.Name = "lblImageCount"; + // // ImageCombinerForm // this.AcceptButton = this.btnCombine; @@ -207,6 +213,7 @@ private void InitializeComponent() resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; this.BackColor = System.Drawing.SystemColors.Window; + this.Controls.Add(this.lblImageCount); this.Controls.Add(this.lblWrapAfterImages); this.Controls.Add(this.nudWrapAfter); this.Controls.Add(this.lblWrapAfter); @@ -258,5 +265,6 @@ private void InitializeComponent() private System.Windows.Forms.Label lblWrapAfter; private System.Windows.Forms.NumericUpDown nudWrapAfter; private System.Windows.Forms.Label lblWrapAfterImages; + private System.Windows.Forms.Label lblImageCount; } } \ No newline at end of file diff --git a/ShareX.MediaLib/Forms/ImageCombinerForm.cs b/ShareX.MediaLib/Forms/ImageCombinerForm.cs index cf637e9ab..bc8ecfd49 100644 --- a/ShareX.MediaLib/Forms/ImageCombinerForm.cs +++ b/ShareX.MediaLib/Forms/ImageCombinerForm.cs @@ -61,6 +61,19 @@ public ImageCombinerForm(ImageCombinerOptions options) cbAutoFillBackground.Checked = Options.AutoFillBackground; } + public ImageCombinerForm(ImageCombinerOptions options, IEnumerable imageFiles) : this(options) + { + if (imageFiles != null) + { + foreach (string image in imageFiles) + { + lvImages.Items.Add(image); + } + + lblImageCount.Text = lvImages.Items.Count.ToString(); + } + } + private void UpdateOrientation() { if (rbOrientationHorizontal.Checked) @@ -93,17 +106,6 @@ private void UpdateAlignmentComboBox() cbAlignment.SelectedIndex = (int)Options.Alignment; } - public ImageCombinerForm(ImageCombinerOptions options, IEnumerable imageFiles) : this(options) - { - if (imageFiles != null) - { - foreach (string image in imageFiles) - { - lvImages.Items.Add(image); - } - } - } - private void btnAdd_Click(object sender, EventArgs e) { string[] images = ImageHelpers.OpenImageFileDialog(true); @@ -114,6 +116,8 @@ private void btnAdd_Click(object sender, EventArgs e) { lvImages.Items.Add(image); } + + lblImageCount.Text = lvImages.Items.Count.ToString(); } } @@ -125,6 +129,8 @@ private void btnRemove_Click(object sender, EventArgs e) { lvImages.Items.Remove(lvi); } + + lblImageCount.Text = lvImages.Items.Count.ToString(); } } @@ -228,6 +234,8 @@ private void ImageCombinerForm_DragDrop(object sender, DragEventArgs e) { lvImages.Items.Add(file); } + + lblImageCount.Text = lvImages.Items.Count.ToString(); } } } diff --git a/ShareX.MediaLib/Forms/ImageCombinerForm.resx b/ShareX.MediaLib/Forms/ImageCombinerForm.resx index 8e7f74d04..905937055 100644 --- a/ShareX.MediaLib/Forms/ImageCombinerForm.resx +++ b/ShareX.MediaLib/Forms/ImageCombinerForm.resx @@ -122,7 +122,7 @@ 8, 8 - 120, 23 + 120, 25 @@ -141,13 +141,13 @@ $this - 16 + 17 136, 8 - 120, 23 + 120, 25 1 @@ -165,13 +165,13 @@ $this - 15 + 16 264, 8 - 120, 23 + 120, 25 2 @@ -189,13 +189,13 @@ $this - 14 + 15 392, 8 - 120, 23 + 120, 25 3 @@ -213,18 +213,12 @@ $this - 13 + 14 Top, Bottom, Left, Right - - Image file path - - - 487 - 8, 40 @@ -244,7 +238,13 @@ $this - 12 + 13 + + + Image file path + + + 487 Bottom, Left, Right @@ -271,7 +271,7 @@ $this - 11 + 12 Bottom, Left @@ -301,7 +301,7 @@ $this - 10 + 11 Bottom, Left @@ -328,7 +328,7 @@ $this - 9 + 10 Bottom, Left @@ -358,7 +358,7 @@ $this - 8 + 9 Bottom, Left @@ -388,7 +388,7 @@ $this - 7 + 8 Bottom, Left @@ -418,7 +418,7 @@ $this - 6 + 7 Bottom, Left @@ -442,7 +442,7 @@ $this - 5 + 6 Bottom, Left @@ -450,6 +450,51 @@ True + + rbOrientationHorizontal + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + flpOrientation + + + 0 + + + rbOrientationVertical + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + flpOrientation + + + 1 + + + 200, 371 + + + 141, 23 + + + 6 + + + flpOrientation + + + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 5 + True @@ -507,27 +552,6 @@ 1 - - 200, 371 - - - 141, 23 - - - 6 - - - flpOrientation - - - System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 4 - Bottom, Left @@ -556,7 +580,7 @@ $this - 3 + 4 Bottom, Left @@ -586,7 +610,7 @@ $this - 2 + 3 Bottom, Left @@ -613,7 +637,7 @@ $this - 1 + 2 Bottom, Left @@ -643,6 +667,36 @@ $this + 1 + + + Bottom, Right + + + 472, 368 + + + 40, 24 + + + 17 + + + 0 + + + TopRight + + + lblImageCount + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + 0 @@ -654,6 +708,9 @@ 521, 536 + + 537, 400 + CenterScreen