public setRegion ( int left, int top, int width, int height ) : void | ||
left | int | The horizontal position to begin at (inclusive) /// |
top | int | The vertical position to begin at (inclusive) /// |
width | int | The width of the region /// |
height | int | The height of the region /// |
리턴 | void |
public void testSetRegion() { BitMatrix matrix = new BitMatrix(5); matrix.setRegion(1, 1, 3, 3); for (int y = 0; y < 5; y++) { for (int x = 0; x < 5; x++) { Assert.AreEqual(y >= 1 && y <= 3 && x >= 1 && x <= 3, matrix[x, y]); } } }
public void testRectangularSetRegion() { BitMatrix matrix = new BitMatrix(320, 240); Assert.AreEqual(320, matrix.Width); Assert.AreEqual(240, matrix.Height); matrix.setRegion(105, 22, 80, 12); // Only bits in the region should be on for (int y = 0; y < 240; y++) { for (int x = 0; x < 320; x++) { Assert.AreEqual(y >= 22 && y < 34 && x >= 105 && x < 185, matrix[x, y]); } } }
/// <summary> See ISO 18004:2006 Annex E</summary> internal BitMatrix buildFunctionPattern() { int dimension = DimensionForVersion; BitMatrix bitMatrix = new BitMatrix(dimension); // Top left finder pattern + separator + format bitMatrix.setRegion(0, 0, 9, 9); // Top right finder pattern + separator + format bitMatrix.setRegion(dimension - 8, 0, 8, 9); // Bottom left finder pattern + separator + format bitMatrix.setRegion(0, dimension - 8, 9, 8); // Alignment patterns int max = alignmentPatternCenters.Length; for (int x = 0; x < max; x++) { int i = alignmentPatternCenters[x] - 2; for (int y = 0; y < max; y++) { if ((x == 0 && (y == 0 || y == max - 1)) || (x == max - 1 && y == 0)) { // No alignment patterns near the three finder paterns continue; } bitMatrix.setRegion(alignmentPatternCenters[y] - 2, i, 5, 5); } } // Vertical timing pattern bitMatrix.setRegion(6, 9, 1, dimension - 17); // Horizontal timing pattern bitMatrix.setRegion(9, 6, dimension - 17, 1); if (versionNumber > 6) { // Version info, top right bitMatrix.setRegion(dimension - 11, 0, 3, 6); // Version info, bottom left bitMatrix.setRegion(0, dimension - 11, 6, 3); } return bitMatrix; }
// Note that the input matrix uses 0 == white, 1 == black, while the output matrix uses // 0 == black, 255 == white (i.e. an 8 bit greyscale bitmap). private static BitMatrix renderResult(QRCode code, int width, int height, int quietZone) { var input = code.Matrix; if (input == null) { throw new InvalidOperationException(); } int inputWidth = input.Width; int inputHeight = input.Height; int qrWidth = inputWidth + (quietZone << 1); int qrHeight = inputHeight + (quietZone << 1); int outputWidth = Math.Max(width, qrWidth); int outputHeight = Math.Max(height, qrHeight); int multiple = Math.Min(outputWidth / qrWidth, outputHeight / qrHeight); // Padding includes both the quiet zone and the extra white pixels to accommodate the requested // dimensions. For example, if input is 25x25 the QR will be 33x33 including the quiet zone. // If the requested size is 200x160, the multiple will be 4, for a QR of 132x132. These will // handle all the padding from 100x100 (the actual QR) up to 200x160. int leftPadding = (outputWidth - (inputWidth * multiple)) / 2; int topPadding = (outputHeight - (inputHeight * multiple)) / 2; var output = new BitMatrix(outputWidth, outputHeight); for (int inputY = 0, outputY = topPadding; inputY < inputHeight; inputY++, outputY += multiple) { // Write the contents of this row of the barcode for (int inputX = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) { if (input[inputX, inputY] == 1) { output.setRegion(outputX, outputY, multiple, multiple); } } } return output; }
/// <summary> /// <returns>a byte array of horizontal pixels (0 = white, 1 = black)</returns> /// </summary> private static BitMatrix renderResult(bool[] code, int width, int height, int sidesMargin) { int inputWidth = code.Length; // Add quiet zone on both sides. int fullWidth = inputWidth + sidesMargin; int outputWidth = Math.Max(width, fullWidth); int outputHeight = Math.Max(1, height); int multiple = outputWidth / fullWidth; int leftPadding = (outputWidth - (inputWidth * multiple)) / 2; BitMatrix output = new BitMatrix(outputWidth, outputHeight); for (int inputX = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) { if (code[inputX]) { output.setRegion(outputX, 0, multiple, outputHeight); } } return output; }
private static BitMatrix renderResult(AztecCode code, int width, int height) { var input = code.Matrix; if (input == null) { throw new InvalidOperationException("No input code matrix"); } int inputWidth = input.Width; int inputHeight = input.Height; int outputWidth = Math.Max(width, inputWidth); int outputHeight = Math.Max(height, inputHeight); int multiple = Math.Min(outputWidth / inputWidth, outputHeight / inputHeight); int leftPadding = (outputWidth - (inputWidth * multiple)) / 2; int topPadding = (outputHeight - (inputHeight * multiple)) / 2; var output = new BitMatrix(outputWidth, outputHeight); for (int inputY = 0, outputY = topPadding; inputY < inputHeight; inputY++, outputY += multiple) { // Write the contents of this row of the barcode for (int inputX = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) { if (input[inputX, inputY]) { output.setRegion(outputX, outputY, multiple, multiple); } } } return output; }