@@ -6,7 +6,7 @@ namespace QRCoder
6
6
{
7
7
public partial class QRCodeGenerator
8
8
{
9
- private static class ModulePlacer
9
+ private static partial class ModulePlacer
10
10
{
11
11
public static void AddQuietZone ( QRCodeData qrCode )
12
12
{
@@ -293,183 +293,6 @@ private static bool IsBlocked(Rectangle r1, List<Rectangle> blockedModules)
293
293
}
294
294
return false ;
295
295
}
296
-
297
- private static class MaskPattern
298
- {
299
- public static readonly Dictionary < int , Func < int , int , bool > > Patterns =
300
- new Dictionary < int , Func < int , int , bool > > ( 8 ) {
301
- { 1 , MaskPattern . Pattern1 } , { 2 , MaskPattern . Pattern2 } , { 3 , MaskPattern . Pattern3 } , { 4 , MaskPattern . Pattern4 } ,
302
- { 5 , MaskPattern . Pattern5 } , { 6 , MaskPattern . Pattern6 } , { 7 , MaskPattern . Pattern7 } , { 8 , MaskPattern . Pattern8 }
303
- } ;
304
-
305
- public static bool Pattern1 ( int x , int y )
306
- {
307
- return ( x + y ) % 2 == 0 ;
308
- }
309
-
310
- public static bool Pattern2 ( int x , int y )
311
- {
312
- return y % 2 == 0 ;
313
- }
314
-
315
- public static bool Pattern3 ( int x , int y )
316
- {
317
- return x % 3 == 0 ;
318
- }
319
-
320
- public static bool Pattern4 ( int x , int y )
321
- {
322
- return ( x + y ) % 3 == 0 ;
323
- }
324
-
325
- public static bool Pattern5 ( int x , int y )
326
- {
327
- return ( ( int ) ( Math . Floor ( y / 2d ) + Math . Floor ( x / 3d ) ) % 2 ) == 0 ;
328
- }
329
-
330
- public static bool Pattern6 ( int x , int y )
331
- {
332
- return ( ( x * y ) % 2 ) + ( ( x * y ) % 3 ) == 0 ;
333
- }
334
-
335
- public static bool Pattern7 ( int x , int y )
336
- {
337
- return ( ( ( x * y ) % 2 ) + ( ( x * y ) % 3 ) ) % 2 == 0 ;
338
- }
339
-
340
- public static bool Pattern8 ( int x , int y )
341
- {
342
- return ( ( ( x + y ) % 2 ) + ( ( x * y ) % 3 ) ) % 2 == 0 ;
343
- }
344
-
345
- public static int Score ( QRCodeData qrCode )
346
- {
347
- int score1 = 0 ,
348
- score2 = 0 ,
349
- score3 = 0 ,
350
- score4 = 0 ;
351
- var size = qrCode . ModuleMatrix . Count ;
352
-
353
- //Penalty 1
354
- for ( var y = 0 ; y < size ; y ++ )
355
- {
356
- var modInRow = 0 ;
357
- var modInColumn = 0 ;
358
- var lastValRow = qrCode . ModuleMatrix [ y ] [ 0 ] ;
359
- var lastValColumn = qrCode . ModuleMatrix [ 0 ] [ y ] ;
360
- for ( var x = 0 ; x < size ; x ++ )
361
- {
362
- if ( qrCode . ModuleMatrix [ y ] [ x ] == lastValRow )
363
- modInRow ++ ;
364
- else
365
- modInRow = 1 ;
366
- if ( modInRow == 5 )
367
- score1 += 3 ;
368
- else if ( modInRow > 5 )
369
- score1 ++ ;
370
- lastValRow = qrCode . ModuleMatrix [ y ] [ x ] ;
371
-
372
-
373
- if ( qrCode . ModuleMatrix [ x ] [ y ] == lastValColumn )
374
- modInColumn ++ ;
375
- else
376
- modInColumn = 1 ;
377
- if ( modInColumn == 5 )
378
- score1 += 3 ;
379
- else if ( modInColumn > 5 )
380
- score1 ++ ;
381
- lastValColumn = qrCode . ModuleMatrix [ x ] [ y ] ;
382
- }
383
- }
384
-
385
-
386
- //Penalty 2
387
- for ( var y = 0 ; y < size - 1 ; y ++ )
388
- {
389
- for ( var x = 0 ; x < size - 1 ; x ++ )
390
- {
391
- if ( qrCode . ModuleMatrix [ y ] [ x ] == qrCode . ModuleMatrix [ y ] [ x + 1 ] &&
392
- qrCode . ModuleMatrix [ y ] [ x ] == qrCode . ModuleMatrix [ y + 1 ] [ x ] &&
393
- qrCode . ModuleMatrix [ y ] [ x ] == qrCode . ModuleMatrix [ y + 1 ] [ x + 1 ] )
394
- score2 += 3 ;
395
- }
396
- }
397
-
398
- //Penalty 3
399
- for ( var y = 0 ; y < size ; y ++ )
400
- {
401
- for ( var x = 0 ; x < size - 10 ; x ++ )
402
- {
403
- if ( ( qrCode . ModuleMatrix [ y ] [ x ] &&
404
- ! qrCode . ModuleMatrix [ y ] [ x + 1 ] &&
405
- qrCode . ModuleMatrix [ y ] [ x + 2 ] &&
406
- qrCode . ModuleMatrix [ y ] [ x + 3 ] &&
407
- qrCode . ModuleMatrix [ y ] [ x + 4 ] &&
408
- ! qrCode . ModuleMatrix [ y ] [ x + 5 ] &&
409
- qrCode . ModuleMatrix [ y ] [ x + 6 ] &&
410
- ! qrCode . ModuleMatrix [ y ] [ x + 7 ] &&
411
- ! qrCode . ModuleMatrix [ y ] [ x + 8 ] &&
412
- ! qrCode . ModuleMatrix [ y ] [ x + 9 ] &&
413
- ! qrCode . ModuleMatrix [ y ] [ x + 10 ] ) ||
414
- ( ! qrCode . ModuleMatrix [ y ] [ x ] &&
415
- ! qrCode . ModuleMatrix [ y ] [ x + 1 ] &&
416
- ! qrCode . ModuleMatrix [ y ] [ x + 2 ] &&
417
- ! qrCode . ModuleMatrix [ y ] [ x + 3 ] &&
418
- qrCode . ModuleMatrix [ y ] [ x + 4 ] &&
419
- ! qrCode . ModuleMatrix [ y ] [ x + 5 ] &&
420
- qrCode . ModuleMatrix [ y ] [ x + 6 ] &&
421
- qrCode . ModuleMatrix [ y ] [ x + 7 ] &&
422
- qrCode . ModuleMatrix [ y ] [ x + 8 ] &&
423
- ! qrCode . ModuleMatrix [ y ] [ x + 9 ] &&
424
- qrCode . ModuleMatrix [ y ] [ x + 10 ] ) )
425
- {
426
- score3 += 40 ;
427
- }
428
-
429
- if ( ( qrCode . ModuleMatrix [ x ] [ y ] &&
430
- ! qrCode . ModuleMatrix [ x + 1 ] [ y ] &&
431
- qrCode . ModuleMatrix [ x + 2 ] [ y ] &&
432
- qrCode . ModuleMatrix [ x + 3 ] [ y ] &&
433
- qrCode . ModuleMatrix [ x + 4 ] [ y ] &&
434
- ! qrCode . ModuleMatrix [ x + 5 ] [ y ] &&
435
- qrCode . ModuleMatrix [ x + 6 ] [ y ] &&
436
- ! qrCode . ModuleMatrix [ x + 7 ] [ y ] &&
437
- ! qrCode . ModuleMatrix [ x + 8 ] [ y ] &&
438
- ! qrCode . ModuleMatrix [ x + 9 ] [ y ] &&
439
- ! qrCode . ModuleMatrix [ x + 10 ] [ y ] ) ||
440
- ( ! qrCode . ModuleMatrix [ x ] [ y ] &&
441
- ! qrCode . ModuleMatrix [ x + 1 ] [ y ] &&
442
- ! qrCode . ModuleMatrix [ x + 2 ] [ y ] &&
443
- ! qrCode . ModuleMatrix [ x + 3 ] [ y ] &&
444
- qrCode . ModuleMatrix [ x + 4 ] [ y ] &&
445
- ! qrCode . ModuleMatrix [ x + 5 ] [ y ] &&
446
- qrCode . ModuleMatrix [ x + 6 ] [ y ] &&
447
- qrCode . ModuleMatrix [ x + 7 ] [ y ] &&
448
- qrCode . ModuleMatrix [ x + 8 ] [ y ] &&
449
- ! qrCode . ModuleMatrix [ x + 9 ] [ y ] &&
450
- qrCode . ModuleMatrix [ x + 10 ] [ y ] ) )
451
- {
452
- score3 += 40 ;
453
- }
454
- }
455
- }
456
-
457
- //Penalty 4
458
- int blackModules = 0 ;
459
- foreach ( var bitArray in qrCode . ModuleMatrix )
460
- for ( var x = 0 ; x < size ; x ++ )
461
- if ( bitArray [ x ] )
462
- blackModules ++ ;
463
-
464
- var percentDiv5 = blackModules * 20 / ( qrCode . ModuleMatrix . Count * qrCode . ModuleMatrix . Count ) ;
465
- var prevMultipleOf5 = Math . Abs ( percentDiv5 - 10 ) ;
466
- var nextMultipleOf5 = Math . Abs ( percentDiv5 - 9 ) ;
467
- score4 = Math . Min ( prevMultipleOf5 , nextMultipleOf5 ) * 10 ;
468
-
469
- return ( score1 + score2 ) + ( score3 + score4 ) ;
470
- }
471
- }
472
-
473
296
}
474
297
}
475
298
}
0 commit comments