You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
3.2 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. #if NET40 || NET461
  5. using System.Drawing.Drawing2D;
  6. using System.Drawing.Imaging;
  7. using System.IO;
  8. using System.Text;
  9. namespace Apewer.Internals.QrCode
  10. {
  11. internal class Base64QRCode : AbstractQRCode, IDisposable
  12. {
  13. private QRCode qr;
  14. /// <summary>
  15. /// Constructor without params to be used in COM Objects connections
  16. /// </summary>
  17. public Base64QRCode() {
  18. qr = new QRCode();
  19. }
  20. public Base64QRCode(QRCodeData data) : base(data) {
  21. qr = new QRCode(data);
  22. }
  23. public override void SetQRCodeData(QRCodeData data) {
  24. this.qr.SetQRCodeData(data);
  25. }
  26. public string GetGraphic(int pixelsPerModule)
  27. {
  28. return this.GetGraphic(pixelsPerModule, Color.Black, Color.White, true);
  29. }
  30. public string GetGraphic(int pixelsPerModule, string darkColorHtmlHex, string lightColorHtmlHex, bool drawQuietZones = true, ImageType imgType = ImageType.Png)
  31. {
  32. return this.GetGraphic(pixelsPerModule, ColorTranslator.FromHtml(darkColorHtmlHex), ColorTranslator.FromHtml(lightColorHtmlHex), drawQuietZones, imgType);
  33. }
  34. public string GetGraphic(int pixelsPerModule, Color darkColor, Color lightColor, bool drawQuietZones = true, ImageType imgType = ImageType.Png)
  35. {
  36. var base64 = string.Empty;
  37. using (Bitmap bmp = qr.GetGraphic(pixelsPerModule, darkColor, lightColor, drawQuietZones))
  38. {
  39. base64 = BitmapToBase64(bmp, imgType);
  40. }
  41. return base64;
  42. }
  43. public string GetGraphic(int pixelsPerModule, Color darkColor, Color lightColor, Bitmap icon, int iconSizePercent = 15, int iconBorderWidth = 6, bool drawQuietZones = true, ImageType imgType = ImageType.Png)
  44. {
  45. var base64 = string.Empty;
  46. using (Bitmap bmp = qr.GetGraphic(pixelsPerModule, darkColor, lightColor, icon, iconSizePercent, iconBorderWidth, drawQuietZones))
  47. {
  48. base64 = BitmapToBase64(bmp, imgType);
  49. }
  50. return base64;
  51. }
  52. private string BitmapToBase64(Bitmap bmp, ImageType imgType)
  53. {
  54. var base64 = string.Empty;
  55. ImageFormat iFormat;
  56. switch (imgType) {
  57. case ImageType.Png:
  58. iFormat = ImageFormat.Png;
  59. break;
  60. case ImageType.Jpeg:
  61. iFormat = ImageFormat.Jpeg;
  62. break;
  63. case ImageType.Gif:
  64. iFormat = ImageFormat.Gif;
  65. break;
  66. default:
  67. iFormat = ImageFormat.Png;
  68. break;
  69. }
  70. using (MemoryStream memoryStream = new MemoryStream())
  71. {
  72. bmp.Save(memoryStream, iFormat);
  73. base64 = Convert.ToBase64String(memoryStream.ToArray(), Base64FormattingOptions.None);
  74. }
  75. return base64;
  76. }
  77. public enum ImageType
  78. {
  79. Gif,
  80. Jpeg,
  81. Png
  82. }
  83. }
  84. }
  85. #endif