'Declaration Public MustInherit Class BarcodeGraphicsRenderer Inherits Vintasoft.Barcode.BarcodeRenderer
public abstract class BarcodeGraphicsRenderer : Vintasoft.Barcode.BarcodeRenderer
public __gc abstract class BarcodeGraphicsRenderer : public Vintasoft.Barcode.BarcodeRenderer*
public ref class BarcodeGraphicsRenderer abstract : public Vintasoft.Barcode.BarcodeRenderer^
Вот C#/VB.NET код, который демонстрирует, как создать рендерер штрих-кода, который переопределяет стандартные алгоритмы рендеринга.
Imports System.ComponentModel Imports System.Drawing Imports System.Drawing.Drawing2D Imports Vintasoft.Barcode Imports Vintasoft.Barcode.Gdi Imports Vintasoft.Barcode.BarcodeStructure Class BarcodeGraphicsRendererExample ''' <summary> ''' Generate QR barcode as an image. ''' </summary> ''' <param name="value">The value.</param> ''' <param name="width">The image width, in pixels.</param> ''' <param name="height">The image height, in pixels.</param> Public Shared Function GenerateQRBarcodeImage(value As String, width As Integer, height As Integer) As Bitmap Using writer As New BarcodeWriter() writer.Settings.Barcode = BarcodeType.QR writer.Settings.Value = value writer.Settings.Resolution = 96F writer.Settings.Padding = 0 Dim quietZone As Integer = Math.Min(width, height) \ 20 writer.Settings.QuietZoneTop = quietZone writer.Settings.QuietZoneLeft = quietZone writer.Settings.QuietZoneRight = quietZone writer.Settings.QuietZoneBottom = quietZone Dim renderer As New BarcodeSimpleRenderer() Return renderer.GetBarcodeAsBitmap(writer, width, height, UnitOfMeasure.Pixels) End Using End Function ''' <summary> ''' A simple renderer of matrix barcode. ''' </summary> ''' <remarks> ''' This renderer draws the barcode search patterns and other barcode elements separately. ''' </remarks> Public Class BarcodeSimpleRenderer Inherits BarcodeGraphicsRenderer #Region "Fields" ''' <summary> ''' The brush that is used for filling the barcode elements. ''' </summary> Private _barcodeBrush As New SolidBrush(Color.Black) ''' <summary> ''' The pen that is used for drawing the barcode elements. ''' </summary> Private _barcodePen As New Pen(Color.Black, 1) #End Region #Region "Constructors" ''' <summary> ''' Initializes a new instance of the <see cref="BarcodeSimpleRenderer"/> class. ''' </summary> Public Sub New() _barcodePen.LineJoin = LineJoin.Round End Sub #End Region #Region "Properties" ''' <summary> ''' Gets or sets the color that is used for drawing the barcode. ''' </summary> <Category("Colors")> _ <Description("Color that is used for drawing the barcode.")> _ Public Property BarcodeColor() As Color Get Return _barcodeBrush.Color End Get Set _barcodeBrush.Color = value _barcodePen.Color = value End Set End Property #End Region #Region "Methods" ''' <summary> ''' Renders the barcode matrix element. ''' </summary> ''' <param name="element">The barcode matrix element to render.</param> ''' <param name="x">The X-coordinate, where barcode matrix element must be rendered.</param> ''' <param name="y">The Y-coordinate, where barcode matrix element must be rendered.</param> Protected Overrides Sub RenderBarcodeMatrixElement(element As BarcodeMatrixElement, x As Integer, y As Integer) ' customize drawing of search patterns Dim isAztecSearchPattern As Boolean = False If element Is BarcodeElements.AztecCompactSearchPattern Then isAztecSearchPattern = True ElseIf element Is BarcodeElements.AztecFullRangeSearchPattern Then isAztecSearchPattern = True End If ' QR search pattern If element Is BarcodeElements.QrSearchPattern Then ' (x,y) ' ####### ' # # ' # ### # ' # ### # ' # ### # ' # # ' ####### ' (x+7,y+7) ' draw outer rectangle 7x7 Graphics.DrawRectangle(_barcodePen, x + 1.5F, y + 1.5F, 6, 6) ' draw inner cell 3x3 Graphics.FillRectangle(_barcodeBrush, x + 3.75F, y + 3.75F, 1.5F, 1.5F) Graphics.DrawRectangle(_barcodePen, x + 3.5F, y + 3.5F, 2F, 2F) ' Aztec search pattern ElseIf isAztecSearchPattern Then ' Compact/Rune Full Range ' (x,y) ' ############# ' (x,y) # # ' ######### # ######### # ' # # # # # # ' # ##### # # # ##### # # ' # # # # # # # # # # ' # # # # # # # # # # # # ' # # # # # # # # # # ' # ##### # # # ##### # # ' # # # # # # ' ######### # ######### # ' (x+9,y+9) # # ' ############# ' (x+13,y+13) ' draw outer rectangles: 13x13, 9x9, 5x5 Dim rectCount As Integer If element Is BarcodeElements.AztecFullRangeSearchPattern Then rectCount = 3 Else rectCount = 2 End If For i As Integer = 0 To rectCount - 1 Graphics.DrawRectangle(_barcodePen, x + 0.5F, y + 0.5F, (rectCount - i) * 4, (rectCount - i) * 4) x += 2 y += 2 Next ' draw inner cell 1x1 Graphics.FillEllipse(_barcodeBrush, New Rectangle(x, y, 1, 1)) ' DataMatrix and Han Xin Code search patterns ElseIf element.Name.Contains("Search Pattern") Then ' draw as single pattern use graphics path Using path As New GraphicsPath() For yc As Integer = 0 To element.Height - 1 For xc As Integer = 0 To element.Width - 1 If element.Matrix(yc, xc) Is BarcodeElements.BlackCell Then path.AddRectangle(New Rectangle(x + xc, y + yc, 1, 1)) End If Next Next Graphics.FillPath(_barcodeBrush, path) End Using Else MyBase.RenderBarcodeMatrixElement(element, x, y) End If End Sub ''' <summary> ''' Renders the barcode element. ''' </summary> ''' <param name="barcodeElement">The barcode element to render.</param> ''' <param name="x">The X-coordinate, where barcode element must be rendered.</param> ''' <param name="y">The Y-coordinate, where barcode element must be rendered.</param> Protected Overrides Sub RenderBarcodeElement(barcodeElement As BarcodeElement, x As Integer, y As Integer) If barcodeElement Is BarcodeElements.BlackCell Then Graphics.FillEllipse(_barcodeBrush, New Rectangle(x, y, 1, 1)) Else MyBase.RenderBarcodeElement(barcodeElement, x, y) End If End Sub ''' <summary> ''' Returns a <see cref="System.String" /> that represents this instance. ''' </summary> ''' <returns> ''' A <see cref="System.String" /> that represents this instance. ''' </returns> Public Overrides Function ToString() As String Return "Simple dots" End Function #End Region End Class End Class
using System; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using Vintasoft.Barcode; using Vintasoft.Barcode.Gdi; using Vintasoft.Barcode.BarcodeStructure; class BarcodeGraphicsRendererExample { /// <summary> /// Generate QR barcode as an image. /// </summary> /// <param name="value">The value.</param> /// <param name="width">The image width, in pixels.</param> /// <param name="height">The image height, in pixels.</param> public static Bitmap GenerateQRBarcodeImage(string value, int width, int height) { using (BarcodeWriter writer = new BarcodeWriter()) { writer.Settings.Barcode = BarcodeType.QR; writer.Settings.Value = value; writer.Settings.Resolution = 96f; writer.Settings.Padding = 0; int quietZone = Math.Min(width, height) / 20; writer.Settings.QuietZoneTop = quietZone; writer.Settings.QuietZoneLeft = quietZone; writer.Settings.QuietZoneRight = quietZone; writer.Settings.QuietZoneBottom = quietZone; BarcodeSimpleRenderer renderer = new BarcodeSimpleRenderer(); return renderer.GetBarcodeAsBitmap(writer, width, height, UnitOfMeasure.Pixels); } } /// <summary> /// A simple renderer of matrix barcode. /// </summary> /// <remarks> /// This renderer draws the barcode search patterns and other barcode elements separately. /// </remarks> public class BarcodeSimpleRenderer : BarcodeGraphicsRenderer { #region Fields /// <summary> /// The brush that is used for filling the barcode elements. /// </summary> SolidBrush _barcodeBrush = new SolidBrush(Color.Black); /// <summary> /// The pen that is used for drawing the barcode elements. /// </summary> Pen _barcodePen = new Pen(Color.Black, 1); #endregion #region Constructors /// <summary> /// Initializes a new instance of the <see cref="BarcodeSimpleRenderer"/> class. /// </summary> public BarcodeSimpleRenderer() { _barcodePen.LineJoin = LineJoin.Round; } #endregion #region Properties /// <summary> /// Gets or sets the color that is used for drawing the barcode. /// </summary> [Category("Colors")] [Description("Color that is used for drawing the barcode.")] public Color BarcodeColor { get { return _barcodeBrush.Color; } set { _barcodeBrush.Color = value; _barcodePen.Color = value; } } #endregion #region Methods /// <summary> /// Renders the barcode matrix element. /// </summary> /// <param name="element">The barcode matrix element to render.</param> /// <param name="x">The X-coordinate, where barcode matrix element must be rendered.</param> /// <param name="y">The Y-coordinate, where barcode matrix element must be rendered.</param> protected override void RenderBarcodeMatrixElement( BarcodeMatrixElement element, int x, int y) { // customize drawing of search patterns bool isAztecSearchPattern = false; if (element == BarcodeElements.AztecCompactSearchPattern) isAztecSearchPattern = true; else if (element == BarcodeElements.AztecFullRangeSearchPattern) isAztecSearchPattern = true; // QR search pattern if (element == BarcodeElements.QrSearchPattern) { // (x,y) // ####### // # # // # ### # // # ### # // # ### # // # # // ####### // (x+7,y+7) // draw outer rectangle 7x7 Graphics.DrawRectangle(_barcodePen, x + 1.5f, y + 1.5f, 6, 6); // draw inner cell 3x3 Graphics.FillRectangle(_barcodeBrush, x + 3.75f, y + 3.75f, 1.5f, 1.5f); Graphics.DrawRectangle(_barcodePen, x + 3.5f, y + 3.5f, 2f, 2f); } // Aztec search pattern else if (isAztecSearchPattern) { // Compact/Rune Full Range // (x,y) // ############# // (x,y) # # // ######### # ######### # // # # # # # # // # ##### # # # ##### # # // # # # # # # # # # # // # # # # # # # # # # # # // # # # # # # # # # # // # ##### # # # ##### # # // # # # # # # // ######### # ######### # // (x+9,y+9) # # // ############# // (x+13,y+13) // draw outer rectangles: 13x13, 9x9, 5x5 int rectCount; if (element == BarcodeElements.AztecFullRangeSearchPattern) rectCount = 3; else rectCount = 2; for (int i = 0; i < rectCount; i++) { Graphics.DrawRectangle(_barcodePen, x + 0.5f, y + 0.5f, (rectCount - i) * 4, (rectCount - i) * 4); x += 2; y += 2; } // draw inner cell 1x1 Graphics.FillEllipse(_barcodeBrush, new Rectangle(x, y, 1, 1)); } // DataMatrix and Han Xin Code search patterns else if (element.Name.Contains("Search Pattern")) { // draw as single pattern use graphics path using (GraphicsPath path = new GraphicsPath()) { for (int yc = 0; yc < element.Height; yc++) { for (int xc = 0; xc < element.Width; xc++) { if (element.Matrix[yc, xc] == BarcodeElements.BlackCell) path.AddRectangle(new Rectangle(x + xc, y + yc, 1, 1)); } } Graphics.FillPath(_barcodeBrush, path); } } else { base.RenderBarcodeMatrixElement(element, x, y); } } /// <summary> /// Renders the barcode element. /// </summary> /// <param name="barcodeElement">The barcode element to render.</param> /// <param name="x">The X-coordinate, where barcode element must be rendered.</param> /// <param name="y">The Y-coordinate, where barcode element must be rendered.</param> protected override void RenderBarcodeElement(BarcodeElement barcodeElement, int x, int y) { if (barcodeElement == BarcodeElements.BlackCell) { Graphics.FillEllipse(_barcodeBrush, new Rectangle(x, y, 1, 1)); } else { base.RenderBarcodeElement(barcodeElement, x, y); } } /// <summary> /// Returns a <see cref="System.String" /> that represents this instance. /// </summary> /// <returns> /// A <see cref="System.String" /> that represents this instance. /// </returns> public override string ToString() { return "Simple dots"; } #endregion } }
System.Object
 Vintasoft.Barcode.BarcodeRenderer
   Vintasoft.Barcode.Gdi.BarcodeGraphicsRenderer
Целевые платформы: .NET 8; .NET 7; .NET 6; .NET Framework 4.8, 4.7, 4.6, 4.5, 4.0, 3.5
Члены типа BarcodeGraphicsRenderer
Пространство имен Vintasoft.Barcode.Gdi
MatrixBarcodeStructure