... |
... |
@@ -398,60 +398,55 @@ |
398
|
398
|
grBitmap* bit,
|
399
|
399
|
int scale )
|
400
|
400
|
{
|
|
401
|
+ int r = bit->rows;
|
|
402
|
+ int w = bit->width;
|
|
403
|
+ int p = bit->pitch;
|
401
|
404
|
unsigned char* s = bit->buffer;
|
402
|
405
|
unsigned char* line;
|
403
|
|
- int pitch;
|
404
|
|
- int width;
|
405
|
406
|
int i, j, k;
|
406
|
407
|
|
407
|
|
- pitch = bit->pitch > 0 ? bit->pitch
|
408
|
|
- : -bit->pitch;
|
409
|
|
- width = bit->width;
|
410
|
408
|
|
411
|
|
- /* limit bitmap size */
|
412
|
|
- if ( pitch * scale <= 0xFFFF && bit->rows * scale <= 0xFFFF )
|
413
|
|
- line = (unsigned char*)malloc( (size_t)( pitch * bit->rows *
|
414
|
|
- scale * scale ) );
|
415
|
|
- else
|
416
|
|
- line = NULL;
|
417
|
|
-
|
418
|
|
- bit->buffer = line; /* the bitmap now owns this buffer */
|
|
409
|
+ if ( p < 0 )
|
|
410
|
+ s -= p * ( r - 1 );
|
419
|
411
|
|
420
|
|
- if ( !line )
|
|
412
|
+ bit->buffer = NULL; /* to replace */
|
|
413
|
+ if ( grNewBitmap( bit->mode, bit->grays, w * scale, r * scale, bit ) )
|
421
|
414
|
return;
|
422
|
415
|
|
|
416
|
+ line = bit->buffer;
|
|
417
|
+
|
423
|
418
|
switch( bit->mode )
|
424
|
419
|
{
|
425
|
420
|
case gr_pixel_mode_mono:
|
426
|
|
- for ( i = 0; i < bit->rows; i++ )
|
|
421
|
+ for ( i = 0; i < r; i++ )
|
427
|
422
|
{
|
428
|
|
- for ( j = 0; j < pitch * scale * 8; j++ )
|
429
|
|
- if ( s[i * pitch + j / scale / 8] & ( 0x80 >> ( j / scale & 7 ) ) )
|
|
423
|
+ for ( j = 0; j < bit->width; j++ )
|
|
424
|
+ if ( s[i * p + j / scale / 8] & ( 0x80 >> ( j / scale & 7 ) ) )
|
430
|
425
|
line[j / 8] |= 0x80 >> ( j & 7 );
|
431
|
426
|
else
|
432
|
427
|
line[j / 8] &= ~( 0x80 >> ( j & 7 ) );
|
433
|
428
|
|
434
|
|
- for ( k = 1; k < scale; k++, line += pitch * scale )
|
435
|
|
- memcpy( line + pitch * scale, line, (size_t)( pitch * scale ) );
|
436
|
|
- line += pitch * scale;
|
|
429
|
+ for ( k = 1; k < scale; k++, line += bit->pitch )
|
|
430
|
+ memcpy( line + bit->pitch, line, (size_t)( bit->pitch ) );
|
|
431
|
+ line += bit->pitch;
|
437
|
432
|
|
438
|
433
|
/* center specks */
|
439
|
434
|
if ( scale > 8 )
|
440
|
|
- for ( j = scale / 2; j < width * scale; j += scale )
|
441
|
|
- line[j / 8 - scale / 2 * pitch * scale] ^= 0x80 >> ( j & 7 );
|
|
435
|
+ for ( j = scale / 2; j < bit->width; j += scale )
|
|
436
|
+ line[j / 8 - scale / 2 * bit->pitch] ^= 0x80 >> ( j & 7 );
|
442
|
437
|
}
|
443
|
438
|
break;
|
444
|
439
|
|
445
|
440
|
case gr_pixel_mode_gray:
|
446
|
441
|
Gray:
|
447
|
|
- for ( i = 0; i < bit->rows; i++ )
|
|
442
|
+ for ( i = 0; i < r; i++ )
|
448
|
443
|
{
|
449
|
|
- for ( j = 0; j < pitch; j++ )
|
450
|
|
- memset( line + j * scale, s[i * pitch + j], (size_t)scale );
|
|
444
|
+ for ( j = 0; j < w; j++ )
|
|
445
|
+ memset( line + j * scale, s[i * p + j], (size_t)scale );
|
451
|
446
|
|
452
|
|
- for ( k = 1; k < scale; k++, line += pitch * scale )
|
453
|
|
- memcpy( line + pitch * scale, line, (size_t)( pitch * scale ) );
|
454
|
|
- line += pitch * scale;
|
|
447
|
+ for ( k = 1; k < scale; k++, line += bit->pitch )
|
|
448
|
+ memcpy( line + bit->pitch, line, (size_t)( bit->pitch ) );
|
|
449
|
+ line += bit->pitch;
|
455
|
450
|
}
|
456
|
451
|
break;
|
457
|
452
|
|
... |
... |
@@ -459,19 +454,19 @@ |
459
|
454
|
case gr_pixel_mode_lcd2:
|
460
|
455
|
if ( st->work & DO_GRAY_BITMAP )
|
461
|
456
|
goto Gray;
|
462
|
|
- for ( i = 0; i < bit->rows; i++ )
|
|
457
|
+ for ( i = 0; i < r; i++ )
|
463
|
458
|
{
|
464
|
|
- for ( j = 0; j < width; j += 3 )
|
|
459
|
+ for ( j = 0; j < w; j += 3 )
|
465
|
460
|
for ( k = 0; k < scale; k++ )
|
466
|
461
|
{
|
467
|
|
- line[j * scale + 3 * k ] = s[i * pitch + j ];
|
468
|
|
- line[j * scale + 3 * k + 1] = s[i * pitch + j + 1];
|
469
|
|
- line[j * scale + 3 * k + 2] = s[i * pitch + j + 2];
|
|
462
|
+ line[j * scale + 3 * k ] = s[i * p + j ];
|
|
463
|
+ line[j * scale + 3 * k + 1] = s[i * p + j + 1];
|
|
464
|
+ line[j * scale + 3 * k + 2] = s[i * p + j + 2];
|
470
|
465
|
}
|
471
|
466
|
|
472
|
|
- for ( k = 1; k < scale; k++, line += pitch * scale )
|
473
|
|
- memcpy( line + pitch * scale, line, (size_t)( pitch * scale ) );
|
474
|
|
- line += pitch * scale;
|
|
467
|
+ for ( k = 1; k < scale; k++, line += bit->pitch )
|
|
468
|
+ memcpy( line + bit->pitch, line, (size_t)( bit->pitch ) );
|
|
469
|
+ line += bit->pitch;
|
475
|
470
|
}
|
476
|
471
|
break;
|
477
|
472
|
|
... |
... |
@@ -479,49 +474,43 @@ |
479
|
474
|
case gr_pixel_mode_lcdv2:
|
480
|
475
|
if ( st->work & DO_GRAY_BITMAP )
|
481
|
476
|
goto Gray;
|
482
|
|
- for ( i = 0; i < bit->rows; i += 3 )
|
|
477
|
+ for ( i = 0; i < r; i += 3 )
|
483
|
478
|
{
|
484
|
|
- for ( j = 0; j < pitch; j++ )
|
|
479
|
+ for ( j = 0; j < w; j++ )
|
485
|
480
|
{
|
486
|
481
|
memset( line + j * scale,
|
487
|
|
- s[i * pitch + j], (size_t)scale );
|
488
|
|
- memset( line + j * scale + pitch * scale,
|
489
|
|
- s[i * pitch + pitch + j], (size_t)scale );
|
490
|
|
- memset( line + j * scale + 2 * pitch * scale,
|
491
|
|
- s[i * pitch + 2 * pitch + j], (size_t)scale );
|
|
482
|
+ s[i * p + j], (size_t)scale );
|
|
483
|
+ memset( line + j * scale + bit->pitch,
|
|
484
|
+ s[i * p + p + j], (size_t)scale );
|
|
485
|
+ memset( line + j * scale + 2 * bit->pitch,
|
|
486
|
+ s[i * p + 2 * p + j], (size_t)scale );
|
492
|
487
|
}
|
493
|
488
|
|
494
|
|
- for ( k = 1; k < scale; k++, line += 3 * pitch * scale )
|
495
|
|
- memcpy( line + 3 * pitch * scale,
|
496
|
|
- line,
|
497
|
|
- (size_t)( 3 * pitch * scale ) );
|
498
|
|
- line += 3 * pitch * scale;
|
|
489
|
+ for ( k = 1; k < scale; k++, line += 3 * bit->pitch )
|
|
490
|
+ memcpy( line + 3 * bit->pitch, line, (size_t)( 3 * bit->pitch ) );
|
|
491
|
+ line += 3 * bit->pitch;
|
499
|
492
|
}
|
500
|
493
|
break;
|
501
|
494
|
|
502
|
495
|
case gr_pixel_mode_bgra:
|
503
|
|
- for ( i = 0; i < bit->rows; i++ )
|
|
496
|
+ for ( i = 0; i < r; i++ )
|
504
|
497
|
{
|
505
|
498
|
FT_UInt32* l4 = (FT_UInt32*)line;
|
506
|
|
- FT_UInt32* s4 = (FT_UInt32*)( s + i * pitch );
|
|
499
|
+ FT_UInt32* s4 = (FT_UInt32*)( s + i * p );
|
507
|
500
|
|
508
|
|
- for ( j = 0; j < width; j++, s4++ )
|
|
501
|
+ for ( j = 0; j < w; j++, s4++ )
|
509
|
502
|
for ( k = 0; k < scale; k++, l4++ )
|
510
|
503
|
*l4 = *s4;
|
511
|
504
|
|
512
|
|
- for ( k = 1; k < scale; k++, line += pitch * scale )
|
513
|
|
- memcpy( line + pitch * scale, line, (size_t)( pitch * scale ) );
|
514
|
|
- line += pitch * scale;
|
|
505
|
+ for ( k = 1; k < scale; k++, line += bit->pitch )
|
|
506
|
+ memcpy( line + bit->pitch, line, (size_t)( bit->pitch ) );
|
|
507
|
+ line += bit->pitch;
|
515
|
508
|
}
|
516
|
509
|
break;
|
517
|
510
|
|
518
|
511
|
default:
|
519
|
512
|
return;
|
520
|
513
|
}
|
521
|
|
-
|
522
|
|
- bit->rows *= scale;
|
523
|
|
- bit->width *= scale;
|
524
|
|
- bit->pitch *= scale;
|
525
|
514
|
}
|
526
|
515
|
|
527
|
516
|
|