mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-01 17:56:51 +13:00
Smart eraser tool gonna use dimmed background color in region capture but output result gonna use proper color
This commit is contained in:
parent
4a58f310ab
commit
f49c345ffd
4 changed files with 50 additions and 17 deletions
|
@ -71,6 +71,7 @@ public sealed class RegionCaptureForm : Form
|
||||||
internal ShapeManager ShapeManager { get; private set; }
|
internal ShapeManager ShapeManager { get; private set; }
|
||||||
internal bool IsClosing { get; private set; }
|
internal bool IsClosing { get; private set; }
|
||||||
|
|
||||||
|
internal Bitmap DimmedCanvas;
|
||||||
internal Image CustomNodeImage = Resources.CircleNode;
|
internal Image CustomNodeImage = Resources.CircleNode;
|
||||||
internal int ToolbarHeight;
|
internal int ToolbarHeight;
|
||||||
|
|
||||||
|
@ -324,13 +325,15 @@ internal void InitBackground(Bitmap canvas, bool centerCanvas = true)
|
||||||
}
|
}
|
||||||
else if (Options.UseDimming)
|
else if (Options.UseDimming)
|
||||||
{
|
{
|
||||||
using (Bitmap darkBackground = (Bitmap)Canvas.Clone())
|
DimmedCanvas?.Dispose();
|
||||||
using (Graphics g = Graphics.FromImage(darkBackground))
|
DimmedCanvas = (Bitmap)Canvas.Clone();
|
||||||
|
|
||||||
|
using (Graphics g = Graphics.FromImage(DimmedCanvas))
|
||||||
using (Brush brush = new SolidBrush(Color.FromArgb(30, Color.Black)))
|
using (Brush brush = new SolidBrush(Color.FromArgb(30, Color.Black)))
|
||||||
{
|
{
|
||||||
g.FillRectangle(brush, 0, 0, darkBackground.Width, darkBackground.Height);
|
g.FillRectangle(brush, 0, 0, DimmedCanvas.Width, DimmedCanvas.Height);
|
||||||
|
|
||||||
backgroundBrush = new TextureBrush(darkBackground) { WrapMode = WrapMode.Clamp };
|
backgroundBrush = new TextureBrush(DimmedCanvas) { WrapMode = WrapMode.Clamp };
|
||||||
}
|
}
|
||||||
|
|
||||||
backgroundHighlightBrush = new TextureBrush(Canvas) { WrapMode = WrapMode.Clamp };
|
backgroundHighlightBrush = new TextureBrush(Canvas) { WrapMode = WrapMode.Clamp };
|
||||||
|
@ -1450,6 +1453,7 @@ protected override void Dispose(bool disposing)
|
||||||
}
|
}
|
||||||
|
|
||||||
regionDrawPath?.Dispose();
|
regionDrawPath?.Dispose();
|
||||||
|
DimmedCanvas?.Dispose();
|
||||||
Canvas?.Dispose();
|
Canvas?.Dispose();
|
||||||
|
|
||||||
base.Dispose(disposing);
|
base.Dispose(disposing);
|
||||||
|
|
|
@ -111,7 +111,8 @@ public Bitmap CaptureActiveMonitor()
|
||||||
|
|
||||||
private Bitmap CaptureRectangleNative(Rectangle rect, bool captureCursor = false)
|
private Bitmap CaptureRectangleNative(Rectangle rect, bool captureCursor = false)
|
||||||
{
|
{
|
||||||
return CaptureRectangleNative(NativeMethods.GetDesktopWindow(), rect, captureCursor);
|
IntPtr handle = NativeMethods.GetDesktopWindow();
|
||||||
|
return CaptureRectangleNative(handle, rect, captureCursor);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Bitmap CaptureRectangleNative(IntPtr handle, Rectangle rect, bool captureCursor = false)
|
private Bitmap CaptureRectangleNative(IntPtr handle, Rectangle rect, bool captureCursor = false)
|
||||||
|
|
|
@ -31,23 +31,48 @@ public class SmartEraserDrawingShape : BaseDrawingShape
|
||||||
{
|
{
|
||||||
public override ShapeType ShapeType { get; } = ShapeType.DrawingSmartEraser;
|
public override ShapeType ShapeType { get; } = ShapeType.DrawingSmartEraser;
|
||||||
|
|
||||||
|
private Color eraserColor;
|
||||||
|
private Color eraserDimmedColor;
|
||||||
|
|
||||||
|
public override void OnConfigLoad()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnConfigSave()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public override void OnCreating()
|
public override void OnCreating()
|
||||||
{
|
{
|
||||||
base.OnCreating();
|
base.OnCreating();
|
||||||
|
|
||||||
Color color = Manager.GetCurrentColor();
|
eraserColor = Manager.GetCurrentColor();
|
||||||
|
|
||||||
if (color.IsEmpty)
|
if (eraserColor.IsEmpty)
|
||||||
{
|
{
|
||||||
color = Color.White;
|
eraserColor = Color.White;
|
||||||
}
|
}
|
||||||
|
|
||||||
FillColor = color;
|
if (Manager.Form.DimmedCanvas != null)
|
||||||
|
{
|
||||||
|
eraserDimmedColor = Manager.GetCurrentColor(Manager.Form.DimmedCanvas);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnDraw(Graphics g)
|
public override void OnDraw(Graphics g)
|
||||||
{
|
{
|
||||||
using (Brush brush = new SolidBrush(FillColor))
|
Color color;
|
||||||
|
|
||||||
|
if (!Manager.IsRenderingOutput && !eraserDimmedColor.IsEmpty)
|
||||||
|
{
|
||||||
|
color = eraserDimmedColor;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
color = eraserColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
using (Brush brush = new SolidBrush(color))
|
||||||
{
|
{
|
||||||
g.FillRectangle(brush, Rectangle);
|
g.FillRectangle(brush, Rectangle);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1698,29 +1698,32 @@ public Bitmap CropImage(Rectangle rect, bool onlyIfSizeDifferent = false)
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Color GetColor(Point pos)
|
public Color GetColor(Bitmap bmp, Point pos)
|
||||||
{
|
{
|
||||||
Bitmap bmpCanvas = Form.Canvas as Bitmap;
|
if (bmp != null)
|
||||||
|
|
||||||
if (bmpCanvas != null)
|
|
||||||
{
|
{
|
||||||
Point position = CaptureHelpers.ScreenToClient(pos);
|
Point position = CaptureHelpers.ScreenToClient(pos);
|
||||||
Point offset = CaptureHelpers.ScreenToClient(Form.CanvasRectangle.Location);
|
Point offset = CaptureHelpers.ScreenToClient(Form.CanvasRectangle.Location);
|
||||||
position.X -= offset.X;
|
position.X -= offset.X;
|
||||||
position.Y -= offset.Y;
|
position.Y -= offset.Y;
|
||||||
|
|
||||||
if (position.X.IsBetween(0, bmpCanvas.Width - 1) && position.Y.IsBetween(0, bmpCanvas.Height - 1))
|
if (position.X.IsBetween(0, bmp.Width - 1) && position.Y.IsBetween(0, bmp.Height - 1))
|
||||||
{
|
{
|
||||||
return bmpCanvas.GetPixel(position.X, position.Y);
|
return bmp.GetPixel(position.X, position.Y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Color.Empty;
|
return Color.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Color GetCurrentColor(Bitmap bmp)
|
||||||
|
{
|
||||||
|
return GetColor(bmp, InputManager.ClientMousePosition);
|
||||||
|
}
|
||||||
|
|
||||||
public Color GetCurrentColor()
|
public Color GetCurrentColor()
|
||||||
{
|
{
|
||||||
return GetColor(InputManager.ClientMousePosition);
|
return GetCurrentColor(Form.Canvas);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void NewImage()
|
public void NewImage()
|
||||||
|
|
Loading…
Reference in a new issue