Preview image of image effects form now gonna be generated automatically to scale with picture box size

This commit is contained in:
Jaex 2019-09-23 11:16:52 +03:00
parent fbcea5a755
commit 5d2e1d098d
2 changed files with 80 additions and 29 deletions

View file

@ -37,8 +37,8 @@ public partial class ImageEffectsForm : Form
{
public event Action<Image> ImageProcessRequested;
public Image DefaultImage { get; private set; }
public bool AutoGeneratePreviewImage { get; set; }
public Image PreviewImage { get; private set; }
public List<ImageEffectPreset> Presets { get; private set; }
public int SelectedPresetIndex { get; private set; }
@ -50,12 +50,18 @@ public ImageEffectsForm(Image img, List<ImageEffectPreset> presets, int selected
InitializeComponent();
ShareXResources.ApplyTheme(this);
DefaultImage = img;
PreviewImage = img;
if (PreviewImage == null)
{
AutoGeneratePreviewImage = true;
}
Presets = presets;
if (Presets.Count == 0)
{
Presets.Add(new ImageEffectPreset());
}
SelectedPresetIndex = selectedPresetIndex;
eiImageEffects.ObjectType = typeof(ImageEffectPreset);
AddAllEffectsToContextMenu();
@ -206,27 +212,35 @@ private void UpdatePreview()
{
ImageEffectPreset preset = GetSelectedPreset();
if (preset != null && DefaultImage != null)
if (preset != null)
{
Cursor = Cursors.WaitCursor;
try
{
Stopwatch timer = Stopwatch.StartNew();
using (Image preview = ApplyEffects())
if (AutoGeneratePreviewImage)
{
if (preview != null)
GeneratePreviewImage(25);
}
if (PreviewImage != null)
{
Stopwatch timer = Stopwatch.StartNew();
using (Image preview = ApplyEffects())
{
pbResult.LoadImage(preview);
Text = string.Format("ShareX - " + Resources.ImageEffectsForm_UpdatePreview_Image_effects___Width___0___Height___1___Render_time___2__ms,
preview.Width, preview.Height, timer.ElapsedMilliseconds);
}
else
{
pbResult.Reset();
Text = string.Format("ShareX - " + Resources.ImageEffectsForm_UpdatePreview_Image_effects___Width___0___Height___1___Render_time___2__ms,
0, 0, timer.ElapsedMilliseconds);
if (preview != null)
{
pbResult.LoadImage(preview);
Text = string.Format("ShareX - " + Resources.ImageEffectsForm_UpdatePreview_Image_effects___Width___0___Height___1___Render_time___2__ms,
preview.Width, preview.Height, timer.ElapsedMilliseconds);
}
else
{
pbResult.Reset();
Text = string.Format("ShareX - " + Resources.ImageEffectsForm_UpdatePreview_Image_effects___Width___0___Height___1___Render_time___2__ms,
0, 0, timer.ElapsedMilliseconds);
}
}
}
}
@ -247,13 +261,50 @@ private void UpdateControlStates()
btnClear.Enabled = lvEffects.Items.Count > 0;
}
private void GeneratePreviewImage(int padding)
{
if (pbResult.ClientSize.Width > 0 && pbResult.ClientSize.Height > 0)
{
int horizontalPadding = padding, verticalPadding = padding;
int minSizePadding = 300;
if (pbResult.ClientSize.Width < (horizontalPadding * 2) + minSizePadding)
{
horizontalPadding = 0;
}
if (pbResult.ClientSize.Height < (verticalPadding * 2) + minSizePadding)
{
verticalPadding = 0;
}
using (Bitmap bmp = new Bitmap(pbResult.ClientSize.Width - (horizontalPadding * 2), pbResult.ClientSize.Height - (verticalPadding * 2)))
{
if (PreviewImage != null) PreviewImage.Dispose();
Color backgroundColor;
if (ShareXResources.UseDarkTheme)
{
backgroundColor = ShareXResources.Theme.BackgroundColor;
}
else
{
backgroundColor = Color.DarkGray;
}
PreviewImage = ImageHelpers.FillBackground(bmp, backgroundColor);
}
}
}
private Image ApplyEffects()
{
ImageEffectPreset preset = GetSelectedPreset();
if (preset != null)
{
return preset.ApplyEffects(DefaultImage);
return preset.ApplyEffects(PreviewImage);
}
return null;
@ -541,8 +592,8 @@ private void tsmiLoadImageFromFile_Click(object sender, EventArgs e)
if (!string.IsNullOrEmpty(filePath))
{
if (DefaultImage != null) DefaultImage.Dispose();
DefaultImage = ImageHelpers.LoadImage(filePath);
if (PreviewImage != null) PreviewImage.Dispose();
PreviewImage = ImageHelpers.LoadImage(filePath);
UpdatePreview();
}
}
@ -553,15 +604,15 @@ private void tsmiLoadImageFromClipboard_Click(object sender, EventArgs e)
if (img != null)
{
if (DefaultImage != null) DefaultImage.Dispose();
DefaultImage = img;
if (PreviewImage != null) PreviewImage.Dispose();
PreviewImage = img;
UpdatePreview();
}
}
private void btnSaveImage_Click(object sender, EventArgs e)
{
if (DefaultImage != null)
if (PreviewImage != null)
{
using (Image img = ApplyEffects())
{
@ -575,7 +626,7 @@ private void btnSaveImage_Click(object sender, EventArgs e)
private void btnUploadImage_Click(object sender, EventArgs e)
{
if (DefaultImage != null)
if (PreviewImage != null)
{
Image img = ApplyEffects();
@ -608,8 +659,8 @@ private void pbResult_DragDrop(object sender, DragEventArgs e)
{
if (Helpers.IsImageFile(files[0]))
{
if (DefaultImage != null) DefaultImage.Dispose();
DefaultImage = ImageHelpers.LoadImage(files[0]);
if (PreviewImage != null) PreviewImage.Dispose();
PreviewImage = ImageHelpers.LoadImage(files[0]);
UpdatePreview();
}
}
@ -620,8 +671,8 @@ private void pbResult_DragDrop(object sender, DragEventArgs e)
if (img != null)
{
if (DefaultImage != null) DefaultImage.Dispose();
DefaultImage = img;
if (PreviewImage != null) PreviewImage.Dispose();
PreviewImage = img;
UpdatePreview();
}
}

View file

@ -782,7 +782,7 @@ private void chkShowImageEffectsWindowAfterCapture_CheckedChanged(object sender,
private void btnImageEffects_Click(object sender, EventArgs e)
{
using (ImageEffectsForm imageEffectsForm = new ImageEffectsForm(ShareXResources.LogoBlack, TaskSettings.ImageSettings.ImageEffectPresets,
using (ImageEffectsForm imageEffectsForm = new ImageEffectsForm(null, TaskSettings.ImageSettings.ImageEffectPresets,
TaskSettings.ImageSettings.SelectedImageEffectPreset))
{
imageEffectsForm.ShowDialog();