Remove System.Windows.Forms references

pull/3613/head^2
2dust 2023-04-05 20:53:05 +08:00
parent 22475e459d
commit 8ad80bb75d
4 changed files with 44 additions and 46 deletions

View File

@ -1,7 +1,4 @@
 namespace v2rayN.Mode
using System.ComponentModel;
namespace v2rayN.Mode
{ {
public enum EViewAction public enum EViewAction
{ {

View File

@ -1177,47 +1177,44 @@ namespace v2rayN
#region scan screen #region scan screen
public static string ScanScreen() public static string ScanScreen(float dpiX, float dpiY)
{ {
try try
{ {
foreach (var screen in System.Windows.Forms.Screen.AllScreens) var left = (int)(SystemParameters.WorkArea.Left);
var top = (int)(SystemParameters.WorkArea.Top);
var width = (int)(SystemParameters.WorkArea.Width / dpiX);
var height = (int)(SystemParameters.WorkArea.Height / dpiY);
using Bitmap fullImage = new Bitmap(width, height);
using (Graphics g = Graphics.FromImage(fullImage))
{ {
var left = screen.Bounds.X; g.CopyFromScreen(left, top, 0, 0, fullImage.Size, CopyPixelOperation.SourceCopy);
var top = screen.Bounds.Y; }
var width = screen.Bounds.Width; int maxTry = 10;
var height = screen.Bounds.Height; for (int i = 0; i < maxTry; i++)
{
int marginLeft = (int)((double)fullImage.Width * i / 2.5 / maxTry);
int marginTop = (int)((double)fullImage.Height * i / 2.5 / maxTry);
Rectangle cropRect = new(marginLeft, marginTop, fullImage.Width - marginLeft * 2, fullImage.Height - marginTop * 2);
Bitmap target = new(width, height);
using Bitmap fullImage = new Bitmap(width, height); double imageScale = (double)width / (double)cropRect.Width;
using (Graphics g = Graphics.FromImage(fullImage)) using (Graphics g = Graphics.FromImage(target))
{ {
g.CopyFromScreen(left, top, 0, 0, fullImage.Size, CopyPixelOperation.SourceCopy); g.DrawImage(fullImage, new Rectangle(0, 0, target.Width, target.Height),
cropRect,
GraphicsUnit.Pixel);
} }
int maxTry = 10;
for (int i = 0; i < maxTry; i++) BitmapLuminanceSource source = new(target);
BinaryBitmap bitmap = new(new HybridBinarizer(source));
QRCodeReader reader = new();
Result result = reader.decode(bitmap);
if (result != null)
{ {
int marginLeft = (int)((double)fullImage.Width * i / 2.5 / maxTry); string ret = result.Text;
int marginTop = (int)((double)fullImage.Height * i / 2.5 / maxTry); return ret;
Rectangle cropRect = new(marginLeft, marginTop, fullImage.Width - marginLeft * 2, fullImage.Height - marginTop * 2);
Bitmap target = new(width, height);
double imageScale = (double)width / (double)cropRect.Width;
using (Graphics g = Graphics.FromImage(target))
{
g.DrawImage(fullImage, new Rectangle(0, 0, target.Width, target.Height),
cropRect,
GraphicsUnit.Pixel);
}
BitmapLuminanceSource source = new(target);
BinaryBitmap bitmap = new(new HybridBinarizer(source));
QRCodeReader reader = new();
Result result = reader.decode(bitmap);
if (result != null)
{
string ret = result.Text;
return ret;
}
} }
} }
} }
@ -1228,6 +1225,14 @@ namespace v2rayN
return string.Empty; return string.Empty;
} }
public static Tuple<float, float> GetDpiXY(Window window)
{
IntPtr hWnd = new WindowInteropHelper(window).EnsureHandle();
Graphics g = Graphics.FromHwnd(hWnd);
return new(96 / g.DpiX, 96 / g.DpiY);
}
#endregion #endregion

View File

@ -20,7 +20,6 @@ using v2rayN.Mode;
using v2rayN.Resx; using v2rayN.Resx;
using v2rayN.Tool; using v2rayN.Tool;
using v2rayN.Views; using v2rayN.Views;
using Application = System.Windows.Application;
namespace v2rayN.ViewModels namespace v2rayN.ViewModels
@ -924,9 +923,10 @@ namespace v2rayN.ViewModels
{ {
ShowHideWindow(false); ShowHideWindow(false);
var dpiXY = Utils.GetDpiXY(Application.Current.MainWindow);
string result = await Task.Run(() => string result = await Task.Run(() =>
{ {
return Utils.ScanScreen(); return Utils.ScanScreen(dpiXY.Item1, dpiXY.Item2);
}); });
ShowHideWindow(true); ShowHideWindow(true);

View File

@ -1,7 +1,6 @@
using ReactiveUI; using ReactiveUI;
using Splat; using Splat;
using System.ComponentModel; using System.ComponentModel;
using System.Drawing;
using System.Reactive.Disposables; using System.Reactive.Disposables;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
@ -420,11 +419,8 @@ namespace v2rayN.Views
Height = _config.uiItem.mainHeight; Height = _config.uiItem.mainHeight;
} }
//IntPtr hWnd = new WindowInteropHelper(this).EnsureHandle(); var maxWidth = SystemParameters.WorkArea.Width;
//Graphics g = Graphics.FromHwnd(hWnd); var maxHeight = SystemParameters.WorkArea.Height;
//var dip = 96;
var maxWidth = SystemParameters.WorkArea.Width;// * dip / g.DpiX;
var maxHeight = SystemParameters.WorkArea.Height;// * dip / g.DpiY;
if (Width > maxWidth) Width = maxWidth; if (Width > maxWidth) Width = maxWidth;
if (Height > maxHeight) Height = maxHeight; if (Height > maxHeight) Height = maxHeight;
if (_config.uiItem.mainGirdHeight1 > 0 && _config.uiItem.mainGirdHeight2 > 0) if (_config.uiItem.mainGirdHeight1 > 0 && _config.uiItem.mainGirdHeight2 > 0)