#include "qrcode.h" #include "rpng.h" #include "file.h" #include "elog.h" #define QRC_RESIZE #if 1 #define LOGD log_d #define LOGE log_e #else #define LOGD printf #define LOGE printf #endif static const uint8_t base64_enc_map[64] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' }; static int base64_len(int n) { return ((n / 3) + (n % 3 ? 1 : 0)) * 4 + 1; } static int base64_encode(uint8_t *src, size_t slen, uint8_t *dst, size_t dlen) { size_t i, n; int C1, C2, C3; uint8_t *p; if( slen == 0 ) { return -1; } n = (slen / 3 + ( slen % 3 != 0 )) * 4; if( ( dlen < n + 1 ) || ( NULL == dst ) ) { return -1; } n = ( slen / 3 ) * 3; for( i = 0, p = dst; i < n; i += 3 ) { C1 = *src++; C2 = *src++; C3 = *src++; *p++ = base64_enc_map[(C1 >> 2) & 0x3F]; *p++ = base64_enc_map[(((C1 & 3) << 4) + (C2 >> 4)) & 0x3F]; *p++ = base64_enc_map[(((C2 & 15) << 2) + (C3 >> 6)) & 0x3F]; *p++ = base64_enc_map[C3 & 0x3F]; } if( i < slen ) { C1 = *src++; C2 = ( ( i + 1 ) < slen ) ? *src++ : 0; *p++ = base64_enc_map[(C1 >> 2) & 0x3F]; *p++ = base64_enc_map[(((C1 & 3) << 4) + (C2 >> 4)) & 0x3F]; if( ( i + 1 ) < slen ) *p++ = base64_enc_map[((C2 & 15) << 2) & 0x3F]; else *p++ = '='; *p++ = '='; } *p = 0; return (p - dst); } ////////////////////////////////////////////////////////////// #if 1 static inline int in_array(int x, int y, int w, int h) { if (x >= 0 && x < w && y >= 0 && y < h) return 1; else return 0; } static uint32_t* rgb_resize(uint32_t* in, int w, int h, int w2, int h2) { int i,j,x1, y1, x2, y2; double f11, f12, f21, f22; double a,b,c,d,e,f; double h_times = (double)h2 / (double)h, w_times = (double)w2 / (double)w; uint32_t *out=(uint32_t*)malloc(h2*w2*4); if(out) { for (i=0; i