iTextSharp.text.pdf.qrcode.MaskUtil.ApplyMaskPenaltyRule3 C# (CSharp) Method

ApplyMaskPenaltyRule3() public static method

public static ApplyMaskPenaltyRule3 ( ByteMatrix matrix ) : int
matrix ByteMatrix
return int
        public static int ApplyMaskPenaltyRule3(ByteMatrix matrix) {
            int penalty = 0;
            sbyte[][] array = matrix.GetArray();
            int width = matrix.GetWidth();
            int height = matrix.GetHeight();
            for (int y = 0; y < height; ++y) {
                for (int x = 0; x < width; ++x) {
                    // Tried to simplify following conditions but failed.
                    if (x + 6 < width &&
                        array[y][x] == 1 &&
                        array[y][x + 1] == 0 &&
                        array[y][x + 2] == 1 &&
                        array[y][x + 3] == 1 &&
                        array[y][x + 4] == 1 &&
                        array[y][x + 5] == 0 &&
                        array[y][x + 6] == 1 &&
                        ((x + 10 < width &&
                            array[y][x + 7] == 0 &&
                            array[y][x + 8] == 0 &&
                            array[y][x + 9] == 0 &&
                            array[y][x + 10] == 0) ||
                            (x - 4 >= 0 &&
                                array[y][x - 1] == 0 &&
                                array[y][x - 2] == 0 &&
                                array[y][x - 3] == 0 &&
                                array[y][x - 4] == 0))) {
                        penalty += 40;
                    }
                    if (y + 6 < height &&
                        array[y][x] == 1 &&
                        array[y + 1][x] == 0 &&
                        array[y + 2][x] == 1 &&
                        array[y + 3][x] == 1 &&
                        array[y + 4][x] == 1 &&
                        array[y + 5][x] == 0 &&
                        array[y + 6][x] == 1 &&
                        ((y + 10 < height &&
                            array[y + 7][x] == 0 &&
                            array[y + 8][x] == 0 &&
                            array[y + 9][x] == 0 &&
                            array[y + 10][x] == 0) ||
                            (y - 4 >= 0 &&
                                array[y - 1][x] == 0 &&
                                array[y - 2][x] == 0 &&
                                array[y - 3][x] == 0 &&
                                array[y - 4][x] == 0))) {
                        penalty += 40;
                    }
                }
            }
            return penalty;
        }

Usage Example

Esempio n. 1
0
        // The mask penalty calculation is complicated.  See Table 21 of JISX0510:2004 (p.45) for details.
        // Basically it applies four rules and summate all penalties.
        private static int CalculateMaskPenalty(ByteMatrix matrix)
        {
            var penalty = 0;

            penalty += MaskUtil.ApplyMaskPenaltyRule1(matrix);
            penalty += MaskUtil.ApplyMaskPenaltyRule2(matrix);
            penalty += MaskUtil.ApplyMaskPenaltyRule3(matrix);
            penalty += MaskUtil.ApplyMaskPenaltyRule4(matrix);
            return(penalty);
        }