| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "../../../include/fxge/fx_dib.h" | 7 #include "../../../include/fxge/fx_dib.h" |
| 8 #include "../../../include/fxge/fx_ge.h" | 8 #include "../../../include/fxge/fx_ge.h" |
| 9 #include "dib_int.h" | 9 #include "dib_int.h" |
| 10 #include <limits.h> | 10 #include <limits.h> |
| (...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 dest_a = dest_a < 0 ? 0 : dest_a > 65536 ? 65536 : d
est_a; | 414 dest_a = dest_a < 0 ? 0 : dest_a > 65536 ? 65536 : d
est_a; |
| 415 } | 415 } |
| 416 *dest_scan++ = (FX_BYTE)(dest_r >> 16); | 416 *dest_scan++ = (FX_BYTE)(dest_r >> 16); |
| 417 *dest_scan_mask++ = (FX_BYTE)((dest_a * 255) >> 16); | 417 *dest_scan_mask++ = (FX_BYTE)((dest_a * 255) >> 16); |
| 418 } | 418 } |
| 419 break; | 419 break; |
| 420 } | 420 } |
| 421 case 5: { | 421 case 5: { |
| 422 for (int col = m_DestClip.left; col < m_DestClip.right; col
++) { | 422 for (int col = m_DestClip.left; col < m_DestClip.right; col
++) { |
| 423 PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeigh
t(col); | 423 PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeigh
t(col); |
| 424 int dest_r_y = 0, dest_g_m = 0, dest_b_c = 0, dest_k = 0
; | 424 int dest_r_y = 0, dest_g_m = 0, dest_b_c = 0; |
| 425 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeigh
ts->m_SrcEnd; j ++) { | 425 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeigh
ts->m_SrcEnd; j ++) { |
| 426 int pixel_weight = pPixelWeights->m_Weights[j - pPix
elWeights->m_SrcStart]; | 426 int pixel_weight = pPixelWeights->m_Weights[j - pPix
elWeights->m_SrcStart]; |
| 427 unsigned long argb_cmyk = m_pSrcPalette[src_scan[j]]
; | 427 unsigned long argb_cmyk = m_pSrcPalette[src_scan[j]]
; |
| 428 if (m_DestFormat == FXDIB_Rgb) { | 428 if (m_DestFormat == FXDIB_Rgb) { |
| 429 dest_r_y += pixel_weight * (FX_BYTE)(argb_cmyk >
> 16); | 429 dest_r_y += pixel_weight * (FX_BYTE)(argb_cmyk >
> 16); |
| 430 dest_g_m += pixel_weight * (FX_BYTE)(argb_cmyk >
> 8); | 430 dest_g_m += pixel_weight * (FX_BYTE)(argb_cmyk >
> 8); |
| 431 dest_b_c += pixel_weight * (FX_BYTE)argb_cmyk; | 431 dest_b_c += pixel_weight * (FX_BYTE)argb_cmyk; |
| 432 } else { | 432 } else { |
| 433 dest_b_c += pixel_weight * (FX_BYTE)(argb_cmyk >
> 24); | 433 dest_b_c += pixel_weight * (FX_BYTE)(argb_cmyk >
> 24); |
| 434 dest_g_m += pixel_weight * (FX_BYTE)(argb_cmyk >
> 16); | 434 dest_g_m += pixel_weight * (FX_BYTE)(argb_cmyk >
> 16); |
| 435 dest_r_y += pixel_weight * (FX_BYTE)(argb_cmyk >
> 8); | 435 dest_r_y += pixel_weight * (FX_BYTE)(argb_cmyk >
> 8); |
| 436 } | 436 } |
| 437 } | 437 } |
| 438 if (m_Flags & FXDIB_BICUBIC_INTERPOL) { | 438 if (m_Flags & FXDIB_BICUBIC_INTERPOL) { |
| 439 dest_r_y = dest_r_y < 0 ? 0 : dest_r_y > 16711680 ?
16711680 : dest_r_y; | 439 dest_r_y = dest_r_y < 0 ? 0 : dest_r_y > 16711680 ?
16711680 : dest_r_y; |
| 440 dest_g_m = dest_g_m < 0 ? 0 : dest_g_m > 16711680 ?
16711680 : dest_g_m; | 440 dest_g_m = dest_g_m < 0 ? 0 : dest_g_m > 16711680 ?
16711680 : dest_g_m; |
| 441 dest_b_c = dest_b_c < 0 ? 0 : dest_b_c > 16711680 ?
16711680 : dest_b_c; | 441 dest_b_c = dest_b_c < 0 ? 0 : dest_b_c > 16711680 ?
16711680 : dest_b_c; |
| 442 } | 442 } |
| 443 *dest_scan++ = (FX_BYTE)(dest_b_c >> 16); | 443 *dest_scan++ = (FX_BYTE)(dest_b_c >> 16); |
| 444 *dest_scan++ = (FX_BYTE)(dest_g_m >> 16); | 444 *dest_scan++ = (FX_BYTE)(dest_g_m >> 16); |
| 445 *dest_scan++ = (FX_BYTE)(dest_r_y >> 16); | 445 *dest_scan++ = (FX_BYTE)(dest_r_y >> 16); |
| 446 } | 446 } |
| 447 break; | 447 break; |
| 448 } | 448 } |
| 449 case 6: { | 449 case 6: { |
| 450 for (int col = m_DestClip.left; col < m_DestClip.right; col
++) { | 450 for (int col = m_DestClip.left; col < m_DestClip.right; col
++) { |
| 451 PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeigh
t(col); | 451 PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeigh
t(col); |
| 452 int dest_a = 0, dest_r_y = 0, dest_g_m = 0, dest_b_c = 0
, dest_k = 0; | 452 int dest_a = 0, dest_r_y = 0, dest_g_m = 0, dest_b_c = 0
; |
| 453 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeigh
ts->m_SrcEnd; j ++) { | 453 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeigh
ts->m_SrcEnd; j ++) { |
| 454 int pixel_weight = pPixelWeights->m_Weights[j - pPix
elWeights->m_SrcStart]; | 454 int pixel_weight = pPixelWeights->m_Weights[j - pPix
elWeights->m_SrcStart]; |
| 455 pixel_weight = pixel_weight * src_scan_mask[j] / 255
; | 455 pixel_weight = pixel_weight * src_scan_mask[j] / 255
; |
| 456 unsigned long argb_cmyk = m_pSrcPalette[src_scan[j]]
; | 456 unsigned long argb_cmyk = m_pSrcPalette[src_scan[j]]
; |
| 457 if (m_DestFormat == FXDIB_Rgba) { | 457 if (m_DestFormat == FXDIB_Rgba) { |
| 458 dest_r_y += pixel_weight * (FX_BYTE)(argb_cmyk >
> 16); | 458 dest_r_y += pixel_weight * (FX_BYTE)(argb_cmyk >
> 16); |
| 459 dest_g_m += pixel_weight * (FX_BYTE)(argb_cmyk >
> 8); | 459 dest_g_m += pixel_weight * (FX_BYTE)(argb_cmyk >
> 8); |
| 460 dest_b_c += pixel_weight * (FX_BYTE)argb_cmyk; | 460 dest_b_c += pixel_weight * (FX_BYTE)argb_cmyk; |
| 461 } else { | 461 } else { |
| 462 dest_b_c += pixel_weight * (FX_BYTE)(argb_cmyk >
> 24); | 462 dest_b_c += pixel_weight * (FX_BYTE)(argb_cmyk >
> 24); |
| 463 dest_g_m += pixel_weight * (FX_BYTE)(argb_cmyk >
> 16); | 463 dest_g_m += pixel_weight * (FX_BYTE)(argb_cmyk >
> 16); |
| 464 dest_r_y += pixel_weight * (FX_BYTE)(argb_cmyk >
> 8); | 464 dest_r_y += pixel_weight * (FX_BYTE)(argb_cmyk >
> 8); |
| 465 } | 465 } |
| 466 dest_a += pixel_weight; | 466 dest_a += pixel_weight; |
| 467 } | 467 } |
| 468 if (m_Flags & FXDIB_BICUBIC_INTERPOL) { | 468 if (m_Flags & FXDIB_BICUBIC_INTERPOL) { |
| 469 dest_k = dest_k < 0 ? 0 : dest_k > 16711680 ? 167116
80 : dest_k; | |
| 470 dest_b_c = dest_b_c < 0 ? 0 : dest_b_c > 16711680 ?
16711680 : dest_b_c; | 469 dest_b_c = dest_b_c < 0 ? 0 : dest_b_c > 16711680 ?
16711680 : dest_b_c; |
| 471 dest_g_m = dest_g_m < 0 ? 0 : dest_g_m > 16711680 ?
16711680 : dest_g_m; | 470 dest_g_m = dest_g_m < 0 ? 0 : dest_g_m > 16711680 ?
16711680 : dest_g_m; |
| 472 dest_r_y = dest_r_y < 0 ? 0 : dest_r_y > 16711680 ?
16711680 : dest_r_y; | 471 dest_r_y = dest_r_y < 0 ? 0 : dest_r_y > 16711680 ?
16711680 : dest_r_y; |
| 473 dest_a = dest_a < 0 ? 0 : dest_a > 65536 ? 65536 : d
est_a; | 472 dest_a = dest_a < 0 ? 0 : dest_a > 65536 ? 65536 : d
est_a; |
| 474 } | 473 } |
| 475 *dest_scan++ = (FX_BYTE)(dest_b_c >> 16); | 474 *dest_scan++ = (FX_BYTE)(dest_b_c >> 16); |
| 476 *dest_scan++ = (FX_BYTE)(dest_g_m >> 16); | 475 *dest_scan++ = (FX_BYTE)(dest_g_m >> 16); |
| 477 *dest_scan++ = (FX_BYTE)(dest_r_y >> 16); | 476 *dest_scan++ = (FX_BYTE)(dest_r_y >> 16); |
| 478 *dest_scan_mask++ = (FX_BYTE)((dest_a * 255) >> 16); | 477 *dest_scan_mask++ = (FX_BYTE)((dest_a * 255) >> 16); |
| 479 } | 478 } |
| 480 break; | 479 break; |
| 481 } | 480 } |
| 482 case 7: { | 481 case 7: { |
| 483 for (int col = m_DestClip.left; col < m_DestClip.right; col
++) { | 482 for (int col = m_DestClip.left; col < m_DestClip.right; col
++) { |
| 484 PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeigh
t(col); | 483 PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeigh
t(col); |
| 485 int dest_r_y = 0, dest_g_m = 0, dest_b_c = 0, dest_k = 0
; | 484 int dest_r_y = 0, dest_g_m = 0, dest_b_c = 0; |
| 486 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeigh
ts->m_SrcEnd; j ++) { | 485 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeigh
ts->m_SrcEnd; j ++) { |
| 487 int pixel_weight = pPixelWeights->m_Weights[j - pPix
elWeights->m_SrcStart]; | 486 int pixel_weight = pPixelWeights->m_Weights[j - pPix
elWeights->m_SrcStart]; |
| 488 FX_LPCBYTE src_pixel = src_scan + j * Bpp; | 487 FX_LPCBYTE src_pixel = src_scan + j * Bpp; |
| 489 dest_b_c += pixel_weight * (*src_pixel++); | 488 dest_b_c += pixel_weight * (*src_pixel++); |
| 490 dest_g_m += pixel_weight * (*src_pixel++); | 489 dest_g_m += pixel_weight * (*src_pixel++); |
| 491 dest_r_y += pixel_weight * (*src_pixel); | 490 dest_r_y += pixel_weight * (*src_pixel); |
| 492 } | 491 } |
| 493 if (m_Flags & FXDIB_BICUBIC_INTERPOL) { | 492 if (m_Flags & FXDIB_BICUBIC_INTERPOL) { |
| 494 dest_b_c = dest_b_c < 0 ? 0 : dest_b_c > 16711680 ?
16711680 : dest_b_c; | 493 dest_b_c = dest_b_c < 0 ? 0 : dest_b_c > 16711680 ?
16711680 : dest_b_c; |
| 495 dest_g_m = dest_g_m < 0 ? 0 : dest_g_m > 16711680 ?
16711680 : dest_g_m; | 494 dest_g_m = dest_g_m < 0 ? 0 : dest_g_m > 16711680 ?
16711680 : dest_g_m; |
| 496 dest_r_y = dest_r_y < 0 ? 0 : dest_r_y > 16711680 ?
16711680 : dest_r_y; | 495 dest_r_y = dest_r_y < 0 ? 0 : dest_r_y > 16711680 ?
16711680 : dest_r_y; |
| 497 } | 496 } |
| 498 *dest_scan++ = (FX_BYTE)((dest_b_c) >> 16); | 497 *dest_scan++ = (FX_BYTE)((dest_b_c) >> 16); |
| 499 *dest_scan++ = (FX_BYTE)((dest_g_m) >> 16); | 498 *dest_scan++ = (FX_BYTE)((dest_g_m) >> 16); |
| 500 *dest_scan++ = (FX_BYTE)((dest_r_y) >> 16); | 499 *dest_scan++ = (FX_BYTE)((dest_r_y) >> 16); |
| 501 dest_scan += Bpp - 3; | 500 dest_scan += Bpp - 3; |
| 502 } | 501 } |
| 503 break; | 502 break; |
| 504 } | 503 } |
| 505 case 8: { | 504 case 8: { |
| 506 for (int col = m_DestClip.left; col < m_DestClip.right; col
++) { | 505 for (int col = m_DestClip.left; col < m_DestClip.right; col
++) { |
| 507 PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeigh
t(col); | 506 PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeigh
t(col); |
| 508 int dest_a = 0, dest_r_y = 0, dest_g_m = 0, dest_b_c = 0
, dest_k = 0; | 507 int dest_a = 0, dest_r_y = 0, dest_g_m = 0, dest_b_c = 0
; |
| 509 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeigh
ts->m_SrcEnd; j ++) { | 508 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeigh
ts->m_SrcEnd; j ++) { |
| 510 int pixel_weight = pPixelWeights->m_Weights[j - pPix
elWeights->m_SrcStart]; | 509 int pixel_weight = pPixelWeights->m_Weights[j - pPix
elWeights->m_SrcStart]; |
| 511 FX_LPCBYTE src_pixel = src_scan + j * Bpp; | 510 FX_LPCBYTE src_pixel = src_scan + j * Bpp; |
| 512 if (m_DestFormat == FXDIB_Argb) { | 511 if (m_DestFormat == FXDIB_Argb) { |
| 513 pixel_weight = pixel_weight * src_pixel[3] / 255
; | 512 pixel_weight = pixel_weight * src_pixel[3] / 255
; |
| 514 } else { | 513 } else { |
| 515 pixel_weight = pixel_weight * src_scan_mask[j] /
255; | 514 pixel_weight = pixel_weight * src_scan_mask[j] /
255; |
| 516 } | 515 } |
| 517 dest_b_c += pixel_weight * (*src_pixel++); | 516 dest_b_c += pixel_weight * (*src_pixel++); |
| 518 dest_g_m += pixel_weight * (*src_pixel++); | 517 dest_g_m += pixel_weight * (*src_pixel++); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 594 *dest_scan = (FX_BYTE)(dest_k >> 16); | 593 *dest_scan = (FX_BYTE)(dest_k >> 16); |
| 595 dest_scan += DestBpp; | 594 dest_scan += DestBpp; |
| 596 *dest_sacn_mask++ = (FX_BYTE)(dest_a >> 16); | 595 *dest_sacn_mask++ = (FX_BYTE)(dest_a >> 16); |
| 597 } | 596 } |
| 598 break; | 597 break; |
| 599 } | 598 } |
| 600 case 5: | 599 case 5: |
| 601 case 7: { | 600 case 7: { |
| 602 for (int col = m_DestClip.left; col < m_DestClip.right; col
++) { | 601 for (int col = m_DestClip.left; col < m_DestClip.right; col
++) { |
| 603 unsigned char* src_scan = m_pInterBuf + (col - m_DestCli
p.left) * DestBpp; | 602 unsigned char* src_scan = m_pInterBuf + (col - m_DestCli
p.left) * DestBpp; |
| 604 int dest_r_y = 0, dest_g_m = 0, dest_b_c = 0, dest_k = 0
; | 603 int dest_r_y = 0, dest_g_m = 0, dest_b_c = 0; |
| 605 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeigh
ts->m_SrcEnd; j ++) { | 604 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeigh
ts->m_SrcEnd; j ++) { |
| 606 int pixel_weight = pPixelWeights->m_Weights[j - pPix
elWeights->m_SrcStart]; | 605 int pixel_weight = pPixelWeights->m_Weights[j - pPix
elWeights->m_SrcStart]; |
| 607 FX_LPCBYTE src_pixel = src_scan + (j - m_SrcClip.top
) * m_InterPitch; | 606 FX_LPCBYTE src_pixel = src_scan + (j - m_SrcClip.top
) * m_InterPitch; |
| 608 dest_b_c += pixel_weight * (*src_pixel++); | 607 dest_b_c += pixel_weight * (*src_pixel++); |
| 609 dest_g_m += pixel_weight * (*src_pixel++); | 608 dest_g_m += pixel_weight * (*src_pixel++); |
| 610 dest_r_y += pixel_weight * (*src_pixel); | 609 dest_r_y += pixel_weight * (*src_pixel); |
| 611 } | 610 } |
| 612 if (m_Flags & FXDIB_BICUBIC_INTERPOL) { | 611 if (m_Flags & FXDIB_BICUBIC_INTERPOL) { |
| 613 dest_r_y = dest_r_y < 0 ? 0 : dest_r_y > 16711680 ?
16711680 : dest_r_y; | 612 dest_r_y = dest_r_y < 0 ? 0 : dest_r_y > 16711680 ?
16711680 : dest_r_y; |
| 614 dest_g_m = dest_g_m < 0 ? 0 : dest_g_m > 16711680 ?
16711680 : dest_g_m; | 613 dest_g_m = dest_g_m < 0 ? 0 : dest_g_m > 16711680 ?
16711680 : dest_g_m; |
| 615 dest_b_c = dest_b_c < 0 ? 0 : dest_b_c > 16711680 ?
16711680 : dest_b_c; | 614 dest_b_c = dest_b_c < 0 ? 0 : dest_b_c > 16711680 ?
16711680 : dest_b_c; |
| 616 } | 615 } |
| 617 dest_scan[0] = (FX_BYTE)((dest_b_c) >> 16); | 616 dest_scan[0] = (FX_BYTE)((dest_b_c) >> 16); |
| 618 dest_scan[1] = (FX_BYTE)((dest_g_m) >> 16); | 617 dest_scan[1] = (FX_BYTE)((dest_g_m) >> 16); |
| 619 dest_scan[2] = (FX_BYTE)((dest_r_y) >> 16); | 618 dest_scan[2] = (FX_BYTE)((dest_r_y) >> 16); |
| 620 dest_scan += DestBpp; | 619 dest_scan += DestBpp; |
| 621 } | 620 } |
| 622 break; | 621 break; |
| 623 } | 622 } |
| 624 case 6: | 623 case 6: |
| 625 case 8: { | 624 case 8: { |
| 626 for (int col = m_DestClip.left; col < m_DestClip.right; col
++) { | 625 for (int col = m_DestClip.left; col < m_DestClip.right; col
++) { |
| 627 unsigned char* src_scan = m_pInterBuf + (col - m_DestCli
p.left) * DestBpp; | 626 unsigned char* src_scan = m_pInterBuf + (col - m_DestCli
p.left) * DestBpp; |
| 628 unsigned char* src_scan_mask = NULL; | 627 unsigned char* src_scan_mask = NULL; |
| 629 if (m_DestFormat != FXDIB_Argb) { | 628 if (m_DestFormat != FXDIB_Argb) { |
| 630 src_scan_mask = m_pExtraAlphaBuf + (col - m_DestClip
.left); | 629 src_scan_mask = m_pExtraAlphaBuf + (col - m_DestClip
.left); |
| 631 } | 630 } |
| 632 int dest_a = 0, dest_k = 0, dest_r_y = 0, dest_g_m = 0,
dest_b_c = 0; | 631 int dest_a = 0, dest_r_y = 0, dest_g_m = 0, dest_b_c = 0
; |
| 633 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeigh
ts->m_SrcEnd; j ++) { | 632 for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeigh
ts->m_SrcEnd; j ++) { |
| 634 int pixel_weight = pPixelWeights->m_Weights[j - pPix
elWeights->m_SrcStart]; | 633 int pixel_weight = pPixelWeights->m_Weights[j - pPix
elWeights->m_SrcStart]; |
| 635 FX_LPCBYTE src_pixel = src_scan + (j - m_SrcClip.top
) * m_InterPitch; | 634 FX_LPCBYTE src_pixel = src_scan + (j - m_SrcClip.top
) * m_InterPitch; |
| 636 int mask_v = 255; | 635 int mask_v = 255; |
| 637 if (src_scan_mask) { | 636 if (src_scan_mask) { |
| 638 mask_v = src_scan_mask[(j - m_SrcClip.top) * m_E
xtraMaskPitch]; | 637 mask_v = src_scan_mask[(j - m_SrcClip.top) * m_E
xtraMaskPitch]; |
| 639 } | 638 } |
| 640 dest_b_c += pixel_weight * (*src_pixel++); | 639 dest_b_c += pixel_weight * (*src_pixel++); |
| 641 dest_g_m += pixel_weight * (*src_pixel++); | 640 dest_g_m += pixel_weight * (*src_pixel++); |
| 642 dest_r_y += pixel_weight * (*src_pixel); | 641 dest_r_y += pixel_weight * (*src_pixel); |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 828 return FALSE; | 827 return FALSE; |
| 829 } | 828 } |
| 830 return TRUE; | 829 return TRUE; |
| 831 } | 830 } |
| 832 FX_BOOL CFX_ImageStretcher::ContinueQuickStretch(IFX_Pause* pPause) | 831 FX_BOOL CFX_ImageStretcher::ContinueQuickStretch(IFX_Pause* pPause) |
| 833 { | 832 { |
| 834 if (m_pScanline == NULL) { | 833 if (m_pScanline == NULL) { |
| 835 return FALSE; | 834 return FALSE; |
| 836 } | 835 } |
| 837 int result_width = m_ClipRect.Width(), result_height = m_ClipRect.Height(); | 836 int result_width = m_ClipRect.Width(), result_height = m_ClipRect.Height(); |
| 838 int src_width = m_pSource->GetWidth(), src_height = m_pSource->GetHeight(); | 837 int src_height = m_pSource->GetHeight(); |
| 839 for (; m_LineIndex < result_height; m_LineIndex ++) { | 838 for (; m_LineIndex < result_height; m_LineIndex ++) { |
| 840 int dest_y, src_y; | 839 int dest_y, src_y; |
| 841 if (m_bFlipY) { | 840 if (m_bFlipY) { |
| 842 dest_y = result_height - m_LineIndex - 1; | 841 dest_y = result_height - m_LineIndex - 1; |
| 843 src_y = (m_DestHeight - (dest_y + m_ClipRect.top) - 1) * src_height
/ m_DestHeight; | 842 src_y = (m_DestHeight - (dest_y + m_ClipRect.top) - 1) * src_height
/ m_DestHeight; |
| 844 } else { | 843 } else { |
| 845 dest_y = m_LineIndex; | 844 dest_y = m_LineIndex; |
| 846 src_y = (dest_y + m_ClipRect.top) * src_height / m_DestHeight; | 845 src_y = (dest_y + m_ClipRect.top) * src_height / m_DestHeight; |
| 847 } | 846 } |
| 848 if (src_y >= src_height) { | 847 if (src_y >= src_height) { |
| 849 src_y = src_height - 1; | 848 src_y = src_height - 1; |
| 850 } | 849 } |
| 851 if (src_y < 0) { | 850 if (src_y < 0) { |
| 852 src_y = 0; | 851 src_y = 0; |
| 853 } | 852 } |
| 854 if (m_pSource->SkipToScanline(src_y, pPause)) { | 853 if (m_pSource->SkipToScanline(src_y, pPause)) { |
| 855 return TRUE; | 854 return TRUE; |
| 856 } | 855 } |
| 857 m_pSource->DownSampleScanline(src_y, m_pScanline, m_DestBPP, m_DestWidth
, m_bFlipX, m_ClipRect.left, result_width); | 856 m_pSource->DownSampleScanline(src_y, m_pScanline, m_DestBPP, m_DestWidth
, m_bFlipX, m_ClipRect.left, result_width); |
| 858 FX_LPBYTE scan_extra_alpha = NULL; | |
| 859 if (m_pMaskScanline) { | 857 if (m_pMaskScanline) { |
| 860 m_pSource->m_pAlphaMask->DownSampleScanline(src_y, m_pMaskScanline,
1, m_DestWidth, m_bFlipX, m_ClipRect.left, result_width); | 858 m_pSource->m_pAlphaMask->DownSampleScanline(src_y, m_pMaskScanline,
1, m_DestWidth, m_bFlipX, m_ClipRect.left, result_width); |
| 861 } | 859 } |
| 862 m_pDest->ComposeScanline(dest_y, m_pScanline, m_pMaskScanline); | 860 m_pDest->ComposeScanline(dest_y, m_pScanline, m_pMaskScanline); |
| 863 } | 861 } |
| 864 return FALSE; | 862 return FALSE; |
| 865 } | 863 } |
| OLD | NEW |