From 5beb59e3b46b77251e19481bd5339decaf8f3df6 Mon Sep 17 00:00:00 2001 From: Claudio Felber Date: Mon, 21 Sep 2020 16:54:55 +0200 Subject: [PATCH] Support horizontally flipped QR-codes according to ISO 18004:2015 --- lib/decode.c | 16 ++++++++++++++++ lib/quirc.h | 3 +++ 2 files changed, 19 insertions(+) diff --git a/lib/decode.c b/lib/decode.c index 6266611..244ade3 100644 --- a/lib/decode.c +++ b/lib/decode.c @@ -916,3 +916,19 @@ quirc_decode_error_t quirc_decode(const struct quirc_code *code, return QUIRC_SUCCESS; } + +void quirc_flip(struct quirc_code *code) +{ + struct quirc_code flipped; + memset(&flipped, 0, sizeof(flipped)); + int offset = 0; + for (int y = 0, sx = 0; y < code->size; y++, sx++) { + for (int x = 0, sy = 0; x < code->size; x++, sy++) { + if (grid_bit(code, sx, sy)) { + flipped.cell_bitmap[offset >> 3] |= (1 << (offset & 7)); + } + offset++; + } + } + memcpy(&code->cell_bitmap, &flipped.cell_bitmap, sizeof(flipped.cell_bitmap)); +} \ No newline at end of file diff --git a/lib/quirc.h b/lib/quirc.h index 97b4bbe..d8d250d 100644 --- a/lib/quirc.h +++ b/lib/quirc.h @@ -168,6 +168,9 @@ void quirc_extract(const struct quirc *q, int index, quirc_decode_error_t quirc_decode(const struct quirc_code *code, struct quirc_data *data); +/* Flip a QR-code according to optional mirror feature of ISO 18004:2015 */ +void quirc_flip(struct quirc_code *code); + #ifdef __cplusplus } #endif