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 "dib_int.h" | 8 #include "dib_int.h" |
9 int SDP_Table[513] = { | 9 int SDP_Table[513] = { |
10 256, 256, 256, 256, 256, 256, 256, 256, 256, 255, 255, 255, 255, 255, 255, 2
54, 254, 254, 254, | 10 256, 256, 256, 256, 256, 256, 256, 256, 256, 255, 255, 255, 255, 255, 255, 2
54, 254, 254, 254, |
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
413 } | 413 } |
414 int row_offset_l = src_row_l * stretch_pitch_mask; | 414 int row_offset_l = src_row_l * stretch_pitch_mask; |
415 int row_offset_r = src_row_r * stretch_pitch_mask; | 415 int row_offset_r = src_row_r * stretch_pitch_mask; |
416 *dest_pos_mask = _bilinear_interpol(stretch_buf_mask, ro
w_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, 1, 0); | 416 *dest_pos_mask = _bilinear_interpol(stretch_buf_mask, ro
w_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, 1, 0); |
417 } | 417 } |
418 dest_pos_mask++; | 418 dest_pos_mask++; |
419 } | 419 } |
420 } | 420 } |
421 } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) { | 421 } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) { |
422 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); | 422 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); |
423 int pos_pixel[8]; | |
424 for (int row = 0; row < m_ResultHeight; row ++) { | 423 for (int row = 0; row < m_ResultHeight; row ++) { |
425 FX_BYTE* dest_pos_mask = (FX_BYTE*)pTransformed->m_pAlphaMask->G
etScanline(row); | 424 FX_BYTE* dest_pos_mask = (FX_BYTE*)pTransformed->m_pAlphaMask->G
etScanline(row); |
426 for (int col = 0; col < m_ResultWidth; col ++) { | 425 for (int col = 0; col < m_ResultWidth; col ++) { |
427 int src_col_l, src_row_l, res_x, res_y; | 426 int src_col_l, src_row_l, res_x, res_y; |
428 result2stretch_fix.Transform(col, row, src_col_l, src_row_l,
res_x, res_y); | 427 result2stretch_fix.Transform(col, row, src_col_l, src_row_l,
res_x, res_y); |
429 if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_
l >= 0 && src_row_l <= stretch_height) { | 428 if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_
l >= 0 && src_row_l <= stretch_height) { |
| 429 int pos_pixel[8]; |
430 int u_w[4], v_w[4]; | 430 int u_w[4], v_w[4]; |
431 if (src_col_l == stretch_width) { | 431 if (src_col_l == stretch_width) { |
432 src_col_l--; | 432 src_col_l--; |
433 } | 433 } |
434 if (src_row_l == stretch_height) { | 434 if (src_row_l == stretch_height) { |
435 src_row_l--; | 435 src_row_l--; |
436 } | 436 } |
437 _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col_l,
src_row_l, res_x, res_y, stretch_width, stretch_height); | 437 _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col_l,
src_row_l, res_x, res_y, stretch_width, stretch_height); |
438 *dest_pos_mask = _bicubic_interpol(stretch_buf_mask, str
etch_pitch_mask, pos_pixel, u_w, v_w, res_x, res_y, 1, 0); | 438 *dest_pos_mask = _bicubic_interpol(stretch_buf_mask, str
etch_pitch_mask, pos_pixel, u_w, v_w, res_x, res_y, 1, 0); |
439 } | 439 } |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 } | 486 } |
487 int row_offset_l = src_row_l * stretch_pitch; | 487 int row_offset_l = src_row_l * stretch_pitch; |
488 int row_offset_r = src_row_r * stretch_pitch; | 488 int row_offset_r = src_row_r * stretch_pitch; |
489 *dest_scan = _bilinear_interpol(stretch_buf, row_offset_
l, row_offset_r, src_col_l, src_col_r, res_x, res_y, 1, 0); | 489 *dest_scan = _bilinear_interpol(stretch_buf, row_offset_
l, row_offset_r, src_col_l, src_col_r, res_x, res_y, 1, 0); |
490 } | 490 } |
491 dest_scan ++; | 491 dest_scan ++; |
492 } | 492 } |
493 } | 493 } |
494 } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) { | 494 } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) { |
495 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); | 495 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); |
496 int pos_pixel[8]; | |
497 for (int row = 0; row < m_ResultHeight; row ++) { | 496 for (int row = 0; row < m_ResultHeight; row ++) { |
498 FX_LPBYTE dest_scan = (FX_LPBYTE)pTransformed->GetScanline(row); | 497 FX_LPBYTE dest_scan = (FX_LPBYTE)pTransformed->GetScanline(row); |
499 for (int col = 0; col < m_ResultWidth; col ++) { | 498 for (int col = 0; col < m_ResultWidth; col ++) { |
500 int src_col_l, src_row_l, res_x, res_y; | 499 int src_col_l, src_row_l, res_x, res_y; |
501 result2stretch_fix.Transform(col, row, src_col_l, src_row_l,
res_x, res_y); | 500 result2stretch_fix.Transform(col, row, src_col_l, src_row_l,
res_x, res_y); |
502 if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_
l >= 0 && src_row_l <= stretch_height) { | 501 if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_
l >= 0 && src_row_l <= stretch_height) { |
| 502 int pos_pixel[8]; |
503 int u_w[4], v_w[4]; | 503 int u_w[4], v_w[4]; |
504 if (src_col_l == stretch_width) { | 504 if (src_col_l == stretch_width) { |
505 src_col_l--; | 505 src_col_l--; |
506 } | 506 } |
507 if (src_row_l == stretch_height) { | 507 if (src_row_l == stretch_height) { |
508 src_row_l--; | 508 src_row_l--; |
509 } | 509 } |
510 _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col_l,
src_row_l, res_x, res_y, stretch_width, stretch_height); | 510 _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col_l,
src_row_l, res_x, res_y, stretch_width, stretch_height); |
511 *dest_scan = _bicubic_interpol(stretch_buf, stretch_pitc
h, pos_pixel, u_w, v_w, res_x, res_y, 1, 0); | 511 *dest_scan = _bicubic_interpol(stretch_buf, stretch_pitc
h, pos_pixel, u_w, v_w, res_x, res_y, 1, 0); |
512 } | 512 } |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
586 dest_pos[2] = (FX_BYTE)(r_bgra_cmyk >> 8); | 586 dest_pos[2] = (FX_BYTE)(r_bgra_cmyk >> 8); |
587 } else { | 587 } else { |
588 *(FX_DWORD*)dest_pos = r_bgra_cmyk; | 588 *(FX_DWORD*)dest_pos = r_bgra_cmyk; |
589 } | 589 } |
590 } | 590 } |
591 dest_pos += destBpp; | 591 dest_pos += destBpp; |
592 } | 592 } |
593 } | 593 } |
594 } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) { | 594 } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) { |
595 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); | 595 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); |
596 int pos_pixel[8]; | |
597 for (int row = 0; row < m_ResultHeight; row ++) { | 596 for (int row = 0; row < m_ResultHeight; row ++) { |
598 FX_BYTE* dest_pos = (FX_BYTE*)pTransformed->GetScanline(row)
; | 597 FX_BYTE* dest_pos = (FX_BYTE*)pTransformed->GetScanline(row)
; |
599 for (int col = 0; col < m_ResultWidth; col ++) { | 598 for (int col = 0; col < m_ResultWidth; col ++) { |
600 int src_col_l, src_row_l, res_x, res_y; | 599 int src_col_l, src_row_l, res_x, res_y; |
601 result2stretch_fix.Transform(col, row, src_col_l, src_ro
w_l, res_x, res_y); | 600 result2stretch_fix.Transform(col, row, src_col_l, src_ro
w_l, res_x, res_y); |
602 if (src_col_l >= 0 && src_col_l <= stretch_width && src_
row_l >= 0 && src_row_l <= stretch_height) { | 601 if (src_col_l >= 0 && src_col_l <= stretch_width && src_
row_l >= 0 && src_row_l <= stretch_height) { |
| 602 int pos_pixel[8]; |
603 int u_w[4], v_w[4]; | 603 int u_w[4], v_w[4]; |
604 if (src_col_l == stretch_width) { | 604 if (src_col_l == stretch_width) { |
605 src_col_l--; | 605 src_col_l--; |
606 } | 606 } |
607 if (src_row_l == stretch_height) { | 607 if (src_row_l == stretch_height) { |
608 src_row_l--; | 608 src_row_l--; |
609 } | 609 } |
610 _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col
_l, src_row_l, res_x, res_y, stretch_width, stretch_height); | 610 _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col
_l, src_row_l, res_x, res_y, stretch_width, stretch_height); |
611 FX_DWORD r_bgra_cmyk = argb[_bicubic_interpol(stretc
h_buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, 1, 0)]; | 611 FX_DWORD r_bgra_cmyk = argb[_bicubic_interpol(stretc
h_buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, 1, 0)]; |
612 if (transformF == FXDIB_Rgba) { | 612 if (transformF == FXDIB_Rgba) { |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
699 } else { | 699 } else { |
700 *(FX_DWORD*)dest_pos = FXARGB_TODIB(FXARGB_M
AKE(r_pos_k_r, r_pos_red_y_r, r_pos_green_m_r, r_pos_blue_c_r)); | 700 *(FX_DWORD*)dest_pos = FXARGB_TODIB(FXARGB_M
AKE(r_pos_k_r, r_pos_red_y_r, r_pos_green_m_r, r_pos_blue_c_r)); |
701 } | 701 } |
702 } | 702 } |
703 } | 703 } |
704 dest_pos += destBpp; | 704 dest_pos += destBpp; |
705 } | 705 } |
706 } | 706 } |
707 } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) { | 707 } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) { |
708 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); | 708 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); |
709 int pos_pixel[8]; | |
710 for (int row = 0; row < m_ResultHeight; row ++) { | 709 for (int row = 0; row < m_ResultHeight; row ++) { |
711 FX_BYTE* dest_pos = (FX_BYTE*)pTransformed->GetScanline(row)
; | 710 FX_BYTE* dest_pos = (FX_BYTE*)pTransformed->GetScanline(row)
; |
712 for (int col = 0; col < m_ResultWidth; col ++) { | 711 for (int col = 0; col < m_ResultWidth; col ++) { |
713 int src_col_l, src_row_l, res_x, res_y, r_pos_k_r = 0; | 712 int src_col_l, src_row_l, res_x, res_y, r_pos_k_r = 0; |
714 result2stretch_fix.Transform(col, row, src_col_l, src_ro
w_l, res_x, res_y); | 713 result2stretch_fix.Transform(col, row, src_col_l, src_ro
w_l, res_x, res_y); |
715 if (src_col_l >= 0 && src_col_l <= stretch_width && src_
row_l >= 0 && src_row_l <= stretch_height) { | 714 if (src_col_l >= 0 && src_col_l <= stretch_width && src_
row_l >= 0 && src_row_l <= stretch_height) { |
| 715 int pos_pixel[8]; |
716 int u_w[4], v_w[4]; | 716 int u_w[4], v_w[4]; |
717 if (src_col_l == stretch_width) { | 717 if (src_col_l == stretch_width) { |
718 src_col_l--; | 718 src_col_l--; |
719 } | 719 } |
720 if (src_row_l == stretch_height) { | 720 if (src_row_l == stretch_height) { |
721 src_row_l--; | 721 src_row_l--; |
722 } | 722 } |
723 _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col
_l, src_row_l, res_x, res_y, stretch_width, stretch_height); | 723 _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col
_l, src_row_l, res_x, res_y, stretch_width, stretch_height); |
724 FX_BYTE r_pos_red_y_r = _bicubic_interpol(stretch_
buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 2); | 724 FX_BYTE r_pos_red_y_r = _bicubic_interpol(stretch_
buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 2); |
725 FX_BYTE r_pos_green_m_r = _bicubic_interpol(stretch_
buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 1); | 725 FX_BYTE r_pos_green_m_r = _bicubic_interpol(stretch_
buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 1); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
788 } | 788 } |
789 dest_pos += destBpp; | 789 dest_pos += destBpp; |
790 } | 790 } |
791 } | 791 } |
792 } | 792 } |
793 } | 793 } |
794 } | 794 } |
795 m_Storer.Replace(pTransformed); | 795 m_Storer.Replace(pTransformed); |
796 return FALSE; | 796 return FALSE; |
797 } | 797 } |
OLD | NEW |