| 494 | |
| 495 | |
| 496 | std::vector<int> qrcodegen::QrCode::getAlignmentPatternPositions(int ver) { |
| 497 | if (ver < 1 || ver > 40) |
| 498 | throw "Version number out of range"; |
| 499 | else if (ver == 1) |
| 500 | return std::vector<int>(); |
| 501 | else { |
| 502 | int numAlign = ver / 7 + 2; |
| 503 | int step; |
| 504 | if (ver != 32) |
| 505 | step = (ver * 4 + numAlign * 2 + 1) / (2 * numAlign - 2) * 2; // ceil((size - 13) / (2*numAlign - 2)) * 2 |
| 506 | else // C-C-C-Combo breaker! |
| 507 | step = 26; |
| 508 | |
| 509 | std::vector<int> result; |
| 510 | int size = ver * 4 + 17; |
| 511 | for (int i = 0, pos = size - 7; i < numAlign - 1; i++, pos -= step) |
| 512 | result.insert(result.begin(), pos); |
| 513 | result.insert(result.begin(), 6); |
| 514 | return result; |
| 515 | } |
| 516 | } |
| 517 | |
| 518 | |
| 519 | int qrcodegen::QrCode::getNumRawDataModules(int ver) { |