freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Git][freetype/freetype-demos][master] * src/ftgrid.c (bitmap_scale): Sc


From: Alexei Podtelezhnikov (@apodtele)
Subject: [Git][freetype/freetype-demos][master] * src/ftgrid.c (bitmap_scale): Scale based on width instead of pitch.
Date: Wed, 18 Dec 2024 18:30:50 +0000

Alexei Podtelezhnikov pushed to branch master at FreeType / FreeType Demo Programs

Commits:

  • f6f0006b
    by Alexei Podtelezhnikov (Алексей Подтележников) at 2024-12-18T18:30:47+00:00
    * src/ftgrid.c (bitmap_scale): Scale based on width instead of pitch.

1 changed file:

Changes:

  • src/ftgrid.c
    ... ... @@ -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
     
    


  • reply via email to

    [Prev in Thread] Current Thread [Next in Thread]