fixed #4918: Added hotkey for QR code decode from screen

This commit is contained in:
Jaex 2020-07-19 17:30:21 +03:00
parent 8d7e1f0744
commit 2a89a63baf
7 changed files with 78 additions and 28 deletions

View file

@ -509,7 +509,7 @@ public static Bitmap Outline(Bitmap bmp, int borderSize, Color borderColor, int
}
}
public static Bitmap MakeOutline(Bitmap bmp, int min_radius, int max_radius, Color color)
public static Bitmap MakeOutline(Bitmap bmp, int minRadius, int maxRadius, Color color)
{
Bitmap bmpResult = bmp.CreateEmptyBitmap();
@ -520,19 +520,19 @@ public static Bitmap MakeOutline(Bitmap bmp, int min_radius, int max_radius, Col
{
for (int y = 0; y < source.Height; y++)
{
float dist = DistanceToThreshold(source, x, y, max_radius, 255);
float dist = DistanceToThreshold(source, x, y, maxRadius, 255);
if (dist > min_radius && dist < max_radius)
if (dist > minRadius && dist < maxRadius)
{
byte alpha = 255;
if (dist - min_radius < 1)
if (dist - minRadius < 1)
{
alpha = (byte)(255 * (dist - min_radius));
alpha = (byte)(255 * (dist - minRadius));
}
else if (max_radius - dist < 1)
else if (maxRadius - dist < 1)
{
alpha = (byte)(255 * (max_radius - dist));
alpha = (byte)(255 * (maxRadius - dist));
}
ColorBgra bgra = new ColorBgra(color.B, color.G, color.R, alpha);

View file

@ -1626,6 +1626,24 @@ internal static string HotkeyType_QRCode_Category {
}
}
/// <summary>
/// Looks up a localized string similar to QR code (Decode from screen).
/// </summary>
internal static string HotkeyType_QRCodeDecodeFromScreen {
get {
return ResourceManager.GetString("HotkeyType_QRCodeDecodeFromScreen", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Tools.
/// </summary>
internal static string HotkeyType_QRCodeDecodeFromScreen_Category {
get {
return ResourceManager.GetString("HotkeyType_QRCodeDecodeFromScreen_Category", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Capture region (Light).
/// </summary>

View file

@ -1250,4 +1250,10 @@ Would you like to download and install it?</value>
<data name="DrawImageSizeMode_PercentageOfWatermark" xml:space="preserve">
<value>Percentage of image</value>
</data>
<data name="HotkeyType_QRCodeDecodeFromScreen" xml:space="preserve">
<value>QR code (Decode from screen)</value>
</data>
<data name="HotkeyType_QRCodeDecodeFromScreen_Category" xml:space="preserve">
<value>Tools</value>
</data>
</root>

View file

@ -210,6 +210,7 @@ public enum HotkeyType // Localized + Category
HashCheck,
DNSChanger,
QRCode,
QRCodeDecodeFromScreen,
Ruler,
IndexFolder,
ImageCombiner,

View file

@ -65,7 +65,7 @@ public static QRCodeForm EncodeClipboard()
return new QRCodeForm();
}
public static QRCodeForm DecodeFile(string filePath)
public static QRCodeForm OpenFormDecodeFromFile(string filePath)
{
QRCodeForm form = new QRCodeForm();
form.tcMain.SelectedTab = form.tpDecode;
@ -73,6 +73,14 @@ public static QRCodeForm DecodeFile(string filePath)
return form;
}
public static QRCodeForm OpenFormDecodeFromScreen()
{
QRCodeForm form = new QRCodeForm();
form.tcMain.SelectedTab = form.tpDecode;
form.DecodeFromScreen();
return form;
}
private void QRCodeForm_Shown(object sender, EventArgs e)
{
isReady = true;
@ -132,6 +140,32 @@ private void DecodeFromFile(string filePath)
}
}
private void DecodeFromScreen()
{
try
{
if (Visible)
{
Hide();
Thread.Sleep(250);
}
TaskSettings taskSettings = TaskSettings.GetDefaultTaskSettings();
using (Bitmap bmp = RegionCaptureTasks.GetRegionImage(taskSettings.CaptureSettings.SurfaceOptions))
{
if (bmp != null)
{
DecodeImage(bmp);
}
}
}
finally
{
this.ForceActivate();
}
}
private void QRCodeForm_Resize(object sender, EventArgs e)
{
EncodeText(txtQRCode.Text);
@ -211,25 +245,7 @@ private void tsmiDecode_Click(object sender, EventArgs e)
private void btnDecodeFromScreen_Click(object sender, EventArgs e)
{
try
{
Hide();
Thread.Sleep(250);
TaskSettings taskSettings = TaskSettings.GetDefaultTaskSettings();
using (Bitmap bmp = RegionCaptureTasks.GetRegionImage(taskSettings.CaptureSettings.SurfaceOptions))
{
if (bmp != null)
{
DecodeImage(bmp);
}
}
}
finally
{
this.ForceActivate();
}
DecodeFromScreen();
}
private void btnDecodeFromFile_Click(object sender, EventArgs e)

View file

@ -195,6 +195,9 @@ public static void ExecuteJob(TaskSettings taskSettings, HotkeyType job, CLIComm
case HotkeyType.QRCode:
OpenQRCode();
break;
case HotkeyType.QRCodeDecodeFromScreen:
OpenQRCodeDecodeFromScreen();
break;
case HotkeyType.Ruler:
OpenRuler(safeTaskSettings);
break;
@ -1135,6 +1138,11 @@ public static void OpenQRCode()
QRCodeForm.EncodeClipboard().Show();
}
public static void OpenQRCodeDecodeFromScreen()
{
QRCodeForm.OpenFormDecodeFromScreen();
}
public static void OpenRuler(TaskSettings taskSettings = null)
{
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
@ -1542,6 +1550,7 @@ public static Image FindMenuIcon<T>(T value) where T : Enum
case HotkeyType.HashCheck: return Resources.application_task;
case HotkeyType.DNSChanger: return Resources.network_ip;
case HotkeyType.QRCode: return ShareXResources.IsDarkTheme ? Resources.barcode_2d_white : Resources.barcode_2d;
case HotkeyType.QRCodeDecodeFromScreen: return ShareXResources.IsDarkTheme ? Resources.barcode_2d_white : Resources.barcode_2d;
case HotkeyType.Ruler: return Resources.ruler_triangle;
case HotkeyType.IndexFolder: return Resources.folder_tree;
case HotkeyType.ImageCombiner: return Resources.document_break;

View file

@ -751,7 +751,7 @@ private void DoFileJobs()
if (Info.TaskSettings.AfterCaptureJob.HasFlag(AfterCaptureTasks.ScanQRCode) && Info.DataType == EDataType.Image)
{
QRCodeForm.DecodeFile(Info.FilePath).ShowDialog();
QRCodeForm.OpenFormDecodeFromFile(Info.FilePath).ShowDialog();
}
}
}