Image-PNG-QRCode

 view release on metacpan or  search on metacpan

qrencode.c  view on Meta::CPAN

#define QR_MINIMUM_VERSION 1
#define QR_MAXIMUM_VERSION 40
#define QR_MINIMUM_LEVEL 1
#define QR_MAXIMUM_LEVEL 4

#endif /* def HEADER */

#define SETQRBIT(f,x,y) qr->f[((x)>>3) + (y) * qr->WDB] |= 0x80 >> ((x) & 7)
#define TOGQRBIT(f,x,y) qr->f[((x)>>3) + (y) * qr->WDB] ^= 0x80 >> ((x) & 7)

static void setmask(qr_t * qr, unsigned char x, unsigned char y)
{
    unsigned bt;
    if (x > y) {
        bt = x;
        x = y;
        y = bt;
    }
    // y*y = 1+3+5...
    bt = y;
    bt *= y;

qrencode.c  view on Meta::CPAN

            i = (qr->WD - 7);
        SETQRBIT(framebase,i + 3, k + 3);
	/* Outer black rectangle */
        for (j = 0; j < 6; j++) {
            SETQRBIT(framebase,i + j, k);
            SETQRBIT(framebase,i, k + j + 1);
            SETQRBIT(framebase,i + 6, k + j);
            SETQRBIT(framebase,i + j + 1, k + 6);
        }
        for (j = 1; j < 5; j++) {
            setmask(qr, i + j, k + 1);
            setmask(qr, i + 1, k + j + 1);
            setmask(qr, i + 5, k + j);
            setmask(qr, i + j + 1, k + 5);
        }
        for (j = 2; j < 4; j++) {
            SETQRBIT(framebase,i + j, k + 2);
            SETQRBIT(framebase,i + 2, k + j + 1);
            SETQRBIT(framebase,i + 4, k + j);
            SETQRBIT(framebase,i + j + 1, k + 4);
        }
    }
}

qrencode.c  view on Meta::CPAN

    int j;

    SETQRBIT(framebase,x, y);
    for (j = -2; j < 2; j++) {
        SETQRBIT(framebase,x + j, y - 2);
        SETQRBIT(framebase,x - 2, y + j + 1);
        SETQRBIT(framebase,x + 2, y + j);
        SETQRBIT(framebase,x + j + 1, y + 2);
    }
    for (j = 0; j < 2; j++) {
        setmask(qr, x - 1, y + j);
        setmask(qr, x + 1, y - j);
        setmask(qr, x - j, y - 1);
        setmask(qr, x + j, y + 1);
    }
}

static const unsigned char adelta[41] = {
    0, 11, 15, 19, 23, 27, 31,  // force 1 pat
    16, 18, 20, 22, 24, 26, 28, 20, 22, 24, 24, 26, 28, 28, 22, 24, 24,
    26, 26, 28, 28, 24, 24, 26, 26, 26, 28, 28, 24, 26, 26, 26, 28, 28,
};

static void doaligns(qr_t * qr)

qrencode.c  view on Meta::CPAN

    verinfo = vpat[vers - 7];

    bc = 17;
    for (x = 0; x < 6; x++) {
        for (y = 0; y < 3; y++, bc--) {
            if (1 & (bc > 11 ? vers >> (bc - 12) : verinfo >> bc)) {
                SETQRBIT(framebase,5 - x, 2 - y + qr->WD - 11);
                SETQRBIT(framebase,2 - y + qr->WD - 11, 5 - x);
            }
	    else {
                setmask(qr, 5 - x, 2 - y + qr->WD - 11);
                setmask(qr, 2 - y + qr->WD - 11, 5 - x);
            }
	}
    }
}

void initframe(qr_t * qr)
{
    unsigned x, y;

    qr->framebase = calloc(qr->WDB * qr->WD, 1);
    qr->framask = calloc(((qr->WD * (qr->WD + 1) / 2) + 7) / 8, 1);
    qr->rlens = malloc(qr->WD + 1);
    // finders
    putfind(qr);
    // alignment blocks
    doaligns(qr);
    // single black
    SETQRBIT(framebase,8, qr->WD - 8);
    // timing gap - masks only
    for (y = 0; y < 7; y++) {
        setmask(qr, 7, y);
        setmask(qr, qr->WD - 8, y);
        setmask(qr, 7, y + qr->WD - 7);
    }
    for (x = 0; x < 8; x++) {
        setmask(qr, x, 7);
        setmask(qr, x + qr->WD - 8, 7);
        setmask(qr, x, qr->WD - 8);
    }
    // reserve mask-format area
    for (x = 0; x < 9; x++)
        setmask(qr,x, 8);
    for (x = 0; x < 8; x++) {
        setmask(qr,x + qr->WD - 8, 8);
        setmask(qr,8, x);
    }
    for (y = 0; y < 7; y++)
        setmask(qr,8, y + qr->WD - 7);
    // timing
    for (x = 0; x < qr->WD - 14; x++) {
        if (x & 1) {
            setmask(qr,8 + x, 6);
            setmask(qr,6, 8 + x);
        }
	else {
            SETQRBIT(framebase,8 + x, 6);
            SETQRBIT(framebase,6, 8 + x);
        }
    }
    // version block
    putvpat(qr);
    for (y = 0; y < qr->WD; y++) {
        for (x = 0; x <= y; x++) {
            if (QRBIT(framebase,x, y)) {
                setmask(qr,x, y);
	    }
	}
    }
}

static void freeframe(qr_t * qr)
{
    free( qr->framebase );
    free( qr->framask );
    free( qr->rlens );



( run in 0.526 second using v1.01-cache-2.11-cpan-cc502c75498 )