43 for(i = 0; i < 8; i++) {
50 frame[width * 8 + width - 1 - i] = v;
52 frame[width * i + 8] = v;
54 frame[width * (i + 1) + 8] = v;
58 for(i = 0; i < 7; i++) {
65 frame[width * (width - 7 + i) + 8] = v;
67 frame[width * 8 + 7] = v;
69 frame[width * 8 + 6 - i] = v;
86#define MASKMAKER(__exp__) \
90 for(y = 0; y < width; y++) {\
91 for(x = 0; x < width; x++) {\
95 *d = *s ^ ((__exp__) == 0);\
103static int Mask_mask0(
int width,
const unsigned char *s,
unsigned char *d)
108static int Mask_mask1(
int width,
const unsigned char *s,
unsigned char *d)
113static int Mask_mask2(
int width,
const unsigned char *s,
unsigned char *d)
118static int Mask_mask3(
int width,
const unsigned char *s,
unsigned char *d)
123static int Mask_mask4(
int width,
const unsigned char *s,
unsigned char *d)
128static int Mask_mask5(
int width,
const unsigned char *s,
unsigned char *d)
133static int Mask_mask6(
int width,
const unsigned char *s,
unsigned char *d)
138static int Mask_mask7(
int width,
const unsigned char *s,
unsigned char *d)
144typedef int MaskMaker(
int,
const unsigned char *,
unsigned char *);
151unsigned char *Mask_makeMaskedFrame(
int width,
unsigned char *frame,
int mask)
153 unsigned char *masked;
155 masked = (
unsigned char *)malloc((
size_t)(width * width));
156 if(masked == NULL)
return NULL;
166 unsigned char *masked;
168 if(mask < 0 || mask >=
maskNum) {
173 masked = (
unsigned char *)malloc((
size_t)(width * width));
174 if(masked == NULL)
return NULL;
194 for(i = 0; i < length; i++) {
195 if(runLength[i] >= 5) {
196 demerit +=
N1 + (runLength[i] - 5);
200 if(i >= 3 && i < length-2 && (runLength[i] % 3) == 0) {
201 fact = runLength[i] / 3;
202 if(runLength[i-2] == fact &&
203 runLength[i-1] == fact &&
204 runLength[i+1] == fact &&
205 runLength[i+2] == fact) {
206 if(i == 3 || runLength[i-3] >= 4 * fact) {
209 }
else if(i+4 >= length || runLength[i+3] >= 4 * fact) {
225 unsigned char b22, w22;
228 p = frame + width + 1;
229 for(y = 1; y < width; y++) {
230 for(x = 1; x < width; x++) {
231 b22 = p[0] & p[-1] & p[-width] & p [-width-1];
232 w22 = p[0] | p[-1] | p[-width] | p [-width-1];
233 if((b22 | (w22 ^ 1))&1) {
259 for(i = 1; i < width; i++) {
260 if((frame[i] ^ prev) & 1) {
287 for(i = 1; i < width; i++) {
288 if((frame[i * width] ^ prev) & 1) {
291 prev = frame[i * width];
309 for(y = 0; y < width; y++) {
314 for(x = 0; x < width; x++) {
325 unsigned char *mask, *bestMask;
326 int minDemerit = INT_MAX;
330 int w2 = width * width;
332 mask = (
unsigned char *)malloc((
size_t)w2);
333 if(mask == NULL)
return NULL;
334 bestMask = (
unsigned char *)malloc((
size_t)w2);
335 if(bestMask == NULL) {
345 bratio = (200 * blacks + w2) / w2 / 2;
346 demerit = (abs(bratio - 50) / 5) *
N4;
350 if(demerit < minDemerit) {
351 minDemerit = demerit;
352 memcpy(bestMask, mask, (
size_t)w2);
static int Mask_mask0(int width, const unsigned char *s, unsigned char *d)
static int Mask_mask3(int width, const unsigned char *s, unsigned char *d)
static int Mask_mask7(int width, const unsigned char *s, unsigned char *d)
static int Mask_mask2(int width, const unsigned char *s, unsigned char *d)
STATIC_IN_RELEASE int Mask_evaluateSymbol(int width, unsigned char *frame)
#define MASKMAKER(__exp__)
STATIC_IN_RELEASE int Mask_calcN1N3(int length, int *runLength)
static int Mask_mask5(int width, const unsigned char *s, unsigned char *d)
unsigned char * Mask_mask(int width, unsigned char *frame, QRecLevel level)
static int Mask_mask6(int width, const unsigned char *s, unsigned char *d)
int MaskMaker(int, const unsigned char *, unsigned char *)
STATIC_IN_RELEASE int Mask_calcN2(int width, unsigned char *frame)
static int Mask_mask4(int width, const unsigned char *s, unsigned char *d)
static int Mask_mask1(int width, const unsigned char *s, unsigned char *d)
STATIC_IN_RELEASE int Mask_writeFormatInformation(int width, unsigned char *frame, int mask, QRecLevel level)
unsigned char * Mask_makeMask(int width, unsigned char *frame, int mask, QRecLevel level)
#define N1
Demerit coefficients.
STATIC_IN_RELEASE int Mask_calcRunLengthH(int width, unsigned char *frame, int *runLength)
static MaskMaker * maskMakers[(8)]
STATIC_IN_RELEASE int Mask_calcRunLengthV(int width, unsigned char *frame, int *runLength)
QRecLevel
Level of error correction.
unsigned int QRspec_getFormatInfo(int mask, QRecLevel level)
Format information.
#define QRSPEC_WIDTH_MAX
Version and capacity.