protected void OutPaintCode() {
int codePtr = 0;
bitColumns = START_CODE_SIZE * (codeColumns + 3) + STOP_SIZE;
int lenBits = ((bitColumns - 1) / 8 + 1) * codeRows;
outBits = new byte[lenBits];
for (int row = 0; row < codeRows; ++row) {
bitPtr = ((bitColumns - 1) / 8 + 1) * 8 * row;
int rowMod = row % 3;
int[] cluster = CLUSTERS[rowMod];
OutStartPattern();
int edge = 0;
switch (rowMod) {
case 0:
edge = 30 * (row / 3) + ((codeRows - 1) / 3);
break;
case 1:
edge = 30 * (row / 3) + errorLevel * 3 + ((codeRows - 1) % 3);
break;
default:
edge = 30 * (row / 3) + codeColumns - 1;
break;
}
OutCodeword(cluster[edge]);
for (int column = 0; column < codeColumns; ++column) {
OutCodeword(cluster[codewords[codePtr++]]);
}
switch (rowMod) {
case 0:
edge = 30 * (row / 3) + codeColumns - 1;
break;
case 1:
edge = 30 * (row / 3) + ((codeRows - 1) / 3);
break;
default:
edge = 30 * (row / 3) + errorLevel * 3 + ((codeRows - 1) % 3);
break;
}
OutCodeword(cluster[edge]);
OutStopPattern();
}
if ((options & PDF417_INVERT_BITMAP) != 0) {
for (int k = 0; k < outBits.Length; ++k)
outBits[k] ^= 0xff;
}
}