using System; using System.Collections; using System.Collections.Generic; using System.Drawing; using System.ComponentModel; using FastReport.Barcode.Aztec; using FastReport.Utils; namespace FastReport.Barcode { /// /// Generates the 2D Aztec barcode. /// public class BarcodeAztec : Barcode2DBase { BitMatrix matrix; int errorCorrectionPercent; const int PIXEL_SIZE = 4; /// /// Gets or sets the error correction percent. /// [DefaultValue(33)] public int ErrorCorrectionPercent { get { return errorCorrectionPercent; } set { errorCorrectionPercent = (value < 5) ? 5 : ((value > 95) ? 95 : value); } } /// /// Initializes a new instance of the class with default settings. /// public BarcodeAztec() { ErrorCorrectionPercent = 33; } internal override void Initialize(string text, bool showText, int angle, float zoom) { base.Initialize(text, showText, angle, zoom); matrix = Encoder.encode(System.Text.Encoding.ASCII.GetBytes(text), ErrorCorrectionPercent, 0).Matrix; } internal override SizeF CalcBounds() { int textAdd = showText ? 18 : 0; return new SizeF(matrix.Width * PIXEL_SIZE, matrix.Height * PIXEL_SIZE + textAdd); } internal override void Draw2DBarcode(IGraphics g, float kx, float ky) { Brush light = Brushes.White; Brush dark = new SolidBrush(Color); for (int y = 0; y < matrix.Height; y++) { for (int x = 0; x < matrix.Width; x++) { bool b = matrix.getRow(y, null)[x]; Brush brush = /*b == true ?*/ dark /*: light*/; if (b == true) g.FillRectangle(brush, x * PIXEL_SIZE * kx, y * PIXEL_SIZE * ky, PIXEL_SIZE * kx, PIXEL_SIZE * ky); } } dark.Dispose(); } /// public override void Assign(BarcodeBase source) { base.Assign(source); BarcodeAztec src = source as BarcodeAztec; ErrorCorrectionPercent = src.ErrorCorrectionPercent; } internal override void Serialize(FastReport.Utils.FRWriter writer, string prefix, BarcodeBase diff) { base.Serialize(writer, prefix, diff); BarcodeAztec c = diff as BarcodeAztec; if (c == null || ErrorCorrectionPercent != c.ErrorCorrectionPercent) writer.WriteInt(prefix + "ErrorCorrection", ErrorCorrectionPercent); } } }