Refactor QRCodeHelper

pull/5636/head
2dust 2024-08-28 10:20:37 +08:00
parent 54c16cad7d
commit 6721d150e0
4 changed files with 39 additions and 10 deletions

View File

@ -0,0 +1,15 @@
using QRCoder;
namespace ServiceLib.Common
{
public class QRCodeHelper
{
public static byte[]? GenQRCode(string? url)
{
using QRCodeGenerator qrGenerator = new();
using QRCodeData qrCodeData = qrGenerator.CreateQrCode(url ?? string.Empty, QRCodeGenerator.ECCLevel.Q);
using PngByteQRCode qrCode = new(qrCodeData);
return qrCode.GetGraphic(20);
}
}
}

View File

@ -13,6 +13,7 @@
<PackageReference Include="sqlite-net-pcl" Version="1.9.172" /> <PackageReference Include="sqlite-net-pcl" Version="1.9.172" />
<PackageReference Include="Splat.NLog" Version="15.1.1" /> <PackageReference Include="Splat.NLog" Version="15.1.1" />
<PackageReference Include="YamlDotNet" Version="16.0.0" /> <PackageReference Include="YamlDotNet" Version="16.0.0" />
<PackageReference Include="QRCoder" Version="1.6.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -1,9 +1,9 @@
using QRCoder; using System.Drawing;
using QRCoder.Xaml; using System.IO;
using System.Drawing;
using System.Windows; using System.Windows;
using System.Windows.Interop; using System.Windows.Interop;
using System.Windows.Media; using System.Windows.Media;
using System.Windows.Media.Imaging;
using ZXing; using ZXing;
using ZXing.Common; using ZXing.Common;
using ZXing.QrCode; using ZXing.QrCode;
@ -16,7 +16,7 @@ namespace v2rayN
/// </summary> /// </summary>
public class QRCodeHelper public class QRCodeHelper
{ {
public static DrawingImage? GetQRCode(string? strContent) public static ImageSource? GetQRCode(string? strContent)
{ {
if (strContent is null) if (strContent is null)
{ {
@ -24,11 +24,12 @@ namespace v2rayN
} }
try try
{ {
QRCodeGenerator qrGenerator = new(); var qrCodeImage = ServiceLib.Common.QRCodeHelper.GenQRCode(strContent);
QRCodeData qrCodeData = qrGenerator.CreateQrCode(strContent, QRCodeGenerator.ECCLevel.H); if (qrCodeImage is null)
XamlQRCode qrCode = new(qrCodeData); {
DrawingImage qrCodeAsXaml = qrCode.GetGraphic(40); return null;
return qrCodeAsXaml; }
return ByteToImage(qrCodeImage);
} }
catch catch
{ {
@ -36,6 +37,19 @@ namespace v2rayN
} }
} }
private static ImageSource ByteToImage(byte[] imageData)
{
BitmapImage biImg = new();
MemoryStream ms = new(imageData);
biImg.BeginInit();
biImg.StreamSource = ms;
biImg.EndInit();
ImageSource imgSrc = biImg as ImageSource;
return imgSrc;
}
public static string ScanScreen(float dpiX, float dpiY) public static string ScanScreen(float dpiX, float dpiY)
{ {
try try

View File

@ -17,7 +17,6 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="MaterialDesignThemes" Version="5.1.0" /> <PackageReference Include="MaterialDesignThemes" Version="5.1.0" />
<PackageReference Include="H.NotifyIcon.Wpf" Version="2.1.2" /> <PackageReference Include="H.NotifyIcon.Wpf" Version="2.1.2" />
<PackageReference Include="QRCoder.Xaml" Version="1.6.0" />
<PackageReference Include="TaskScheduler" Version="2.11.0" /> <PackageReference Include="TaskScheduler" Version="2.11.0" />
<PackageReference Include="ZXing.Net.Bindings.Windows.Compatibility" Version="0.16.12" /> <PackageReference Include="ZXing.Net.Bindings.Windows.Compatibility" Version="0.16.12" />
<PackageReference Include="ReactiveUI.Fody" Version="19.5.41" /> <PackageReference Include="ReactiveUI.Fody" Version="19.5.41" />