1
- #if NETFRAMEWORK || NETSTANDARD2_0 || NET5_0 || NET6_0_WINDOWS
1
+ #if ! NETSTANDARD1_3
2
2
using System ;
3
3
using System . Drawing ;
4
4
using System . Drawing . Imaging ;
5
5
using System . IO ;
6
+ using System . Runtime . InteropServices ;
6
7
using static QRCoder . Base64QRCode ;
7
8
using static QRCoder . QRCodeGenerator ;
8
9
9
10
namespace QRCoder
10
11
{
11
- #if NET6_0_WINDOWS
12
- [ System . Runtime . Versioning . SupportedOSPlatform ( "windows" ) ]
13
- #endif
14
12
public class Base64QRCode : AbstractQRCode , IDisposable
15
13
{
16
- private QRCode qr ;
17
-
18
14
/// <summary>
19
15
/// Constructor without params to be used in COM Objects connections
20
16
/// </summary>
21
- public Base64QRCode ( ) {
22
- qr = new QRCode ( ) ;
23
- }
24
-
25
- public Base64QRCode ( QRCodeData data ) : base ( data ) {
26
- qr = new QRCode ( data ) ;
17
+ public Base64QRCode ( )
18
+ {
27
19
}
28
20
29
- public override void SetQRCodeData ( QRCodeData data ) {
30
- this . qr . SetQRCodeData ( data ) ;
21
+ public Base64QRCode ( QRCodeData data ) : base ( data )
22
+ {
31
23
}
32
24
33
25
public string GetGraphic ( int pixelsPerModule )
@@ -43,30 +35,92 @@ public string GetGraphic(int pixelsPerModule, string darkColorHtmlHex, string li
43
35
44
36
public string GetGraphic ( int pixelsPerModule , Color darkColor , Color lightColor , bool drawQuietZones = true , ImageType imgType = ImageType . Png )
45
37
{
46
- var base64 = string . Empty ;
47
- using ( Bitmap bmp = qr . GetGraphic ( pixelsPerModule , darkColor , lightColor , drawQuietZones ) )
38
+ if ( imgType == ImageType . Png )
48
39
{
49
- base64 = BitmapToBase64 ( bmp , imgType ) ;
40
+ var pngCoder = new PngByteQRCode ( QrCodeData ) ;
41
+
42
+ byte [ ] pngData ;
43
+ if ( darkColor == Color . Black && lightColor == Color . White )
44
+ {
45
+ pngData = pngCoder . GetGraphic ( pixelsPerModule , drawQuietZones ) ;
46
+ }
47
+ else
48
+ {
49
+ byte [ ] darkColorBytes ;
50
+ byte [ ] lightColorBytes ;
51
+ if ( darkColor . A != 255 || lightColor . A != 255 )
52
+ {
53
+ darkColorBytes = new byte [ ] { darkColor . R , darkColor . G , darkColor . B , darkColor . A } ;
54
+ lightColorBytes = new byte [ ] { lightColor . R , lightColor . G , lightColor . B , lightColor . A } ;
55
+ }
56
+ else
57
+ {
58
+ darkColorBytes = new byte [ ] { darkColor . R , darkColor . G , darkColor . B } ;
59
+ lightColorBytes = new byte [ ] { lightColor . R , lightColor . G , lightColor . B } ;
60
+ }
61
+ pngData = pngCoder . GetGraphic ( pixelsPerModule , darkColorBytes , lightColorBytes , drawQuietZones ) ;
62
+ }
63
+
64
+ return Convert . ToBase64String ( pngData , Base64FormattingOptions . None ) ;
65
+
66
+ byte [ ] ToRgba ( Color color )
67
+ {
68
+ return new byte [ ] { color . R , color . G , color . B , color . A } ;
69
+ }
50
70
}
51
- return base64 ;
71
+
72
+ #if NETFRAMEWORK || NETSTANDARD2_0 || NET5_0 || NET6_0_WINDOWS
73
+ if (
74
+ #if NET6_0_OR_GREATER
75
+ RuntimeInformation . IsOSPlatform ( OSPlatform . Windows )
76
+ #else
77
+ true
78
+ #endif
79
+ )
80
+ {
81
+ var qr = new QRCode ( QrCodeData ) ;
82
+ var base64 = string . Empty ;
83
+ using ( Bitmap bmp = qr . GetGraphic ( pixelsPerModule , darkColor , lightColor , drawQuietZones ) )
84
+ {
85
+ base64 = BitmapToBase64 ( bmp , imgType ) ;
86
+ }
87
+ return base64 ;
88
+ }
89
+ else
90
+ {
91
+ throw new PlatformNotSupportedException ( "The specified image type is not supported on this platform." ) ;
92
+ }
93
+ #else
94
+ throw new PlatformNotSupportedException ( "The specified image type is not supported on this platform." ) ;
95
+ #endif
52
96
}
53
97
98
+ #if NETFRAMEWORK || NETSTANDARD2_0 || NET5_0 || NET6_0_WINDOWS
99
+ #if NET6_0_WINDOWS
100
+ [ System . Runtime . Versioning . SupportedOSPlatform ( "windows" ) ]
101
+ #endif
54
102
public string GetGraphic ( int pixelsPerModule , Color darkColor , Color lightColor , Bitmap icon , int iconSizePercent = 15 , int iconBorderWidth = 6 , bool drawQuietZones = true , ImageType imgType = ImageType . Png )
55
103
{
104
+ var qr = new QRCode ( QrCodeData ) ;
56
105
var base64 = string . Empty ;
57
106
using ( Bitmap bmp = qr . GetGraphic ( pixelsPerModule , darkColor , lightColor , icon , iconSizePercent , iconBorderWidth , drawQuietZones ) )
58
107
{
59
108
base64 = BitmapToBase64 ( bmp , imgType ) ;
60
109
}
61
110
return base64 ;
62
111
}
112
+ #endif
63
113
64
-
114
+ #if NETFRAMEWORK || NETSTANDARD2_0 || NET5_0 || NET6_0_WINDOWS
115
+ #if NET6_0_WINDOWS
116
+ [ System . Runtime . Versioning . SupportedOSPlatform ( "windows" ) ]
117
+ #endif
65
118
private string BitmapToBase64 ( Bitmap bmp , ImageType imgType )
66
119
{
67
120
var base64 = string . Empty ;
68
121
ImageFormat iFormat ;
69
- switch ( imgType ) {
122
+ switch ( imgType )
123
+ {
70
124
case ImageType . Png :
71
125
iFormat = ImageFormat . Png ;
72
126
break ;
@@ -87,19 +141,23 @@ private string BitmapToBase64(Bitmap bmp, ImageType imgType)
87
141
}
88
142
return base64 ;
89
143
}
144
+ #endif
90
145
91
146
public enum ImageType
92
147
{
148
+ #if NET6_0_WINDOWS
149
+ [ System . Runtime . Versioning . SupportedOSPlatform ( "windows" ) ]
150
+ #endif
93
151
Gif ,
152
+ #if NET6_0_WINDOWS
153
+ [ System . Runtime . Versioning . SupportedOSPlatform ( "windows" ) ]
154
+ #endif
94
155
Jpeg ,
95
156
Png
96
157
}
97
158
98
159
}
99
160
100
- #if NET6_0_WINDOWS
101
- [ System . Runtime . Versioning . SupportedOSPlatform ( "windows" ) ]
102
- #endif
103
161
public static class Base64QRCodeHelper
104
162
{
105
163
public static string GetQRCode ( string plainText , int pixelsPerModule , string darkColorHtmlHex , string lightColorHtmlHex , ECCLevel eccLevel , bool forceUtf8 = false , bool utf8BOM = false , EciMode eciMode = EciMode . Default , int requestedVersion = - 1 , bool drawQuietZones = true , ImageType imgType = ImageType . Png )
0 commit comments