| 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 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 pDestMatrix->c / stretch_height, pDestMatrix->d / stretc
h_height, pDestMatrix->e, pDestMatrix->f); | 252 pDestMatrix->c / stretch_height, pDestMatrix->d / stretc
h_height, pDestMatrix->e, pDestMatrix->f); |
| 253 m_dest2stretch.SetReverse(stretch2dest); | 253 m_dest2stretch.SetReverse(stretch2dest); |
| 254 CFX_FloatRect clip_rect_f(result_clip); | 254 CFX_FloatRect clip_rect_f(result_clip); |
| 255 clip_rect_f.Transform(&m_dest2stretch); | 255 clip_rect_f.Transform(&m_dest2stretch); |
| 256 m_StretchClip = clip_rect_f.GetOutterRect(); | 256 m_StretchClip = clip_rect_f.GetOutterRect(); |
| 257 m_StretchClip.Intersect(0, 0, stretch_width, stretch_height); | 257 m_StretchClip.Intersect(0, 0, stretch_width, stretch_height); |
| 258 m_Stretcher.Start(&m_Storer, pSrc, stretch_width, stretch_height, m_StretchC
lip, flags); | 258 m_Stretcher.Start(&m_Storer, pSrc, stretch_width, stretch_height, m_StretchC
lip, flags); |
| 259 m_Status = 3; | 259 m_Status = 3; |
| 260 return TRUE; | 260 return TRUE; |
| 261 } | 261 } |
| 262 FX_BYTE _bilinear_interpol(FX_LPCBYTE buf, int row_offset_l, int row_offset_r, | 262 uint8_t _bilinear_interpol(FX_LPCBYTE buf, int row_offset_l, int row_offset_r, |
| 263 int src_col_l, int src_col_r, int res_x, int res_y, | 263 int src_col_l, int src_col_r, int res_x, int res_y, |
| 264 int bpp, int c_offset) | 264 int bpp, int c_offset) |
| 265 { | 265 { |
| 266 int i_resx = 255 - res_x; | 266 int i_resx = 255 - res_x; |
| 267 int col_bpp_l = src_col_l * bpp; | 267 int col_bpp_l = src_col_l * bpp; |
| 268 int col_bpp_r = src_col_r * bpp; | 268 int col_bpp_r = src_col_r * bpp; |
| 269 FX_LPCBYTE buf_u = buf + row_offset_l + c_offset; | 269 FX_LPCBYTE buf_u = buf + row_offset_l + c_offset; |
| 270 FX_LPCBYTE buf_d = buf + row_offset_r + c_offset; | 270 FX_LPCBYTE buf_d = buf + row_offset_r + c_offset; |
| 271 FX_LPCBYTE src_pos0 = buf_u + col_bpp_l; | 271 FX_LPCBYTE src_pos0 = buf_u + col_bpp_l; |
| 272 FX_LPCBYTE src_pos1 = buf_u + col_bpp_r; | 272 FX_LPCBYTE src_pos1 = buf_u + col_bpp_r; |
| 273 FX_LPCBYTE src_pos2 = buf_d + col_bpp_l; | 273 FX_LPCBYTE src_pos2 = buf_d + col_bpp_l; |
| 274 FX_LPCBYTE src_pos3 = buf_d + col_bpp_r; | 274 FX_LPCBYTE src_pos3 = buf_d + col_bpp_r; |
| 275 FX_BYTE r_pos_0 = (*src_pos0 * i_resx + *src_pos1 * res_x) >> 8; | 275 uint8_t r_pos_0 = (*src_pos0 * i_resx + *src_pos1 * res_x) >> 8; |
| 276 FX_BYTE r_pos_1 = (*src_pos2 * i_resx + *src_pos3 * res_x) >> 8; | 276 uint8_t r_pos_1 = (*src_pos2 * i_resx + *src_pos3 * res_x) >> 8; |
| 277 return (r_pos_0 * (255 - res_y) + r_pos_1 * res_y) >> 8; | 277 return (r_pos_0 * (255 - res_y) + r_pos_1 * res_y) >> 8; |
| 278 } | 278 } |
| 279 FX_BYTE _bicubic_interpol(FX_LPCBYTE buf, int pitch, int pos_pixel[], int u_w[],
int v_w[], int res_x, int res_y, | 279 uint8_t _bicubic_interpol(FX_LPCBYTE buf, int pitch, int pos_pixel[], int u_w[],
int v_w[], int res_x, int res_y, |
| 280 int bpp, int c_offset) | 280 int bpp, int c_offset) |
| 281 { | 281 { |
| 282 int s_result = 0; | 282 int s_result = 0; |
| 283 for (int i = 0; i < 4; i ++) { | 283 for (int i = 0; i < 4; i ++) { |
| 284 int a_result = 0; | 284 int a_result = 0; |
| 285 for (int j = 0; j < 4; j ++) { | 285 for (int j = 0; j < 4; j ++) { |
| 286 a_result += u_w[j] * (*(FX_BYTE*)(buf + pos_pixel[i + 4] * pitch + p
os_pixel[j] * bpp + c_offset)); | 286 a_result += u_w[j] * (*(uint8_t*)(buf + pos_pixel[i + 4] * pitch + p
os_pixel[j] * bpp + c_offset)); |
| 287 } | 287 } |
| 288 s_result += a_result * v_w[i]; | 288 s_result += a_result * v_w[i]; |
| 289 } | 289 } |
| 290 s_result >>= 16; | 290 s_result >>= 16; |
| 291 return (FX_BYTE)(s_result < 0 ? 0 : s_result > 255 ? 255 : s_result); | 291 return (uint8_t)(s_result < 0 ? 0 : s_result > 255 ? 255 : s_result); |
| 292 } | 292 } |
| 293 void _bicubic_get_pos_weight(int pos_pixel[], int u_w[], int v_w[], int src_col_
l, int src_row_l, | 293 void _bicubic_get_pos_weight(int pos_pixel[], int u_w[], int v_w[], int src_col_
l, int src_row_l, |
| 294 int res_x, int res_y, int stretch_width, int stretc
h_height) | 294 int res_x, int res_y, int stretch_width, int stretc
h_height) |
| 295 { | 295 { |
| 296 pos_pixel[0] = src_col_l - 1; | 296 pos_pixel[0] = src_col_l - 1; |
| 297 pos_pixel[1] = src_col_l; | 297 pos_pixel[1] = src_col_l; |
| 298 pos_pixel[2] = src_col_l + 1; | 298 pos_pixel[2] = src_col_l + 1; |
| 299 pos_pixel[3] = src_col_l + 2; | 299 pos_pixel[3] = src_col_l + 2; |
| 300 pos_pixel[4] = src_row_l - 1; | 300 pos_pixel[4] = src_row_l - 1; |
| 301 pos_pixel[5] = src_row_l; | 301 pos_pixel[5] = src_row_l; |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 CFX_AffineMatrix result2stretch(1.0f, 0.0f, 0.0f, 1.0f, (FX_FLOAT)(m_ResultL
eft), (FX_FLOAT)(m_ResultTop)); | 383 CFX_AffineMatrix result2stretch(1.0f, 0.0f, 0.0f, 1.0f, (FX_FLOAT)(m_ResultL
eft), (FX_FLOAT)(m_ResultTop)); |
| 384 result2stretch.Concat(m_dest2stretch); | 384 result2stretch.Concat(m_dest2stretch); |
| 385 result2stretch.TranslateI(-m_StretchClip.left, -m_StretchClip.top); | 385 result2stretch.TranslateI(-m_StretchClip.left, -m_StretchClip.top); |
| 386 if (stretch_buf_mask == NULL && pTransformed->m_pAlphaMask) { | 386 if (stretch_buf_mask == NULL && pTransformed->m_pAlphaMask) { |
| 387 pTransformed->m_pAlphaMask->Clear(0xff000000); | 387 pTransformed->m_pAlphaMask->Clear(0xff000000); |
| 388 } else if (pTransformed->m_pAlphaMask) { | 388 } else if (pTransformed->m_pAlphaMask) { |
| 389 int stretch_pitch_mask = m_Storer.GetBitmap()->m_pAlphaMask->GetPitch(); | 389 int stretch_pitch_mask = m_Storer.GetBitmap()->m_pAlphaMask->GetPitch(); |
| 390 if (!(m_Flags & FXDIB_DOWNSAMPLE) && !(m_Flags & FXDIB_BICUBIC_INTERPOL)
) { | 390 if (!(m_Flags & FXDIB_DOWNSAMPLE) && !(m_Flags & FXDIB_BICUBIC_INTERPOL)
) { |
| 391 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); | 391 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); |
| 392 for (int row = 0; row < m_ResultHeight; row ++) { | 392 for (int row = 0; row < m_ResultHeight; row ++) { |
| 393 FX_BYTE* dest_pos_mask = (FX_BYTE*)pTransformed->m_pAlphaMask->G
etScanline(row); | 393 uint8_t* dest_pos_mask = (uint8_t*)pTransformed->m_pAlphaMask->G
etScanline(row); |
| 394 for (int col = 0; col < m_ResultWidth; col ++) { | 394 for (int col = 0; col < m_ResultWidth; col ++) { |
| 395 int src_col_l, src_row_l, res_x, res_y; | 395 int src_col_l, src_row_l, res_x, res_y; |
| 396 result2stretch_fix.Transform(col, row, src_col_l, src_row_l,
res_x, res_y); | 396 result2stretch_fix.Transform(col, row, src_col_l, src_row_l,
res_x, res_y); |
| 397 if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_
l >= 0 && src_row_l <= stretch_height) { | 397 if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_
l >= 0 && src_row_l <= stretch_height) { |
| 398 if (src_col_l == stretch_width) { | 398 if (src_col_l == stretch_width) { |
| 399 src_col_l--; | 399 src_col_l--; |
| 400 } | 400 } |
| 401 if (src_row_l == stretch_height) { | 401 if (src_row_l == stretch_height) { |
| 402 src_row_l--; | 402 src_row_l--; |
| 403 } | 403 } |
| 404 int src_col_r = src_col_l + 1; | 404 int src_col_r = src_col_l + 1; |
| 405 int src_row_r = src_row_l + 1; | 405 int src_row_r = src_row_l + 1; |
| 406 if (src_col_r == stretch_width) { | 406 if (src_col_r == stretch_width) { |
| 407 src_col_r--; | 407 src_col_r--; |
| 408 } | 408 } |
| 409 if (src_row_r == stretch_height) { | 409 if (src_row_r == stretch_height) { |
| 410 src_row_r--; | 410 src_row_r--; |
| 411 } | 411 } |
| 412 int row_offset_l = src_row_l * stretch_pitch_mask; | 412 int row_offset_l = src_row_l * stretch_pitch_mask; |
| 413 int row_offset_r = src_row_r * stretch_pitch_mask; | 413 int row_offset_r = src_row_r * stretch_pitch_mask; |
| 414 *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); | 414 *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); |
| 415 } | 415 } |
| 416 dest_pos_mask++; | 416 dest_pos_mask++; |
| 417 } | 417 } |
| 418 } | 418 } |
| 419 } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) { | 419 } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) { |
| 420 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); | 420 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); |
| 421 for (int row = 0; row < m_ResultHeight; row ++) { | 421 for (int row = 0; row < m_ResultHeight; row ++) { |
| 422 FX_BYTE* dest_pos_mask = (FX_BYTE*)pTransformed->m_pAlphaMask->G
etScanline(row); | 422 uint8_t* dest_pos_mask = (uint8_t*)pTransformed->m_pAlphaMask->G
etScanline(row); |
| 423 for (int col = 0; col < m_ResultWidth; col ++) { | 423 for (int col = 0; col < m_ResultWidth; col ++) { |
| 424 int src_col_l, src_row_l, res_x, res_y; | 424 int src_col_l, src_row_l, res_x, res_y; |
| 425 result2stretch_fix.Transform(col, row, src_col_l, src_row_l,
res_x, res_y); | 425 result2stretch_fix.Transform(col, row, src_col_l, src_row_l,
res_x, res_y); |
| 426 if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_
l >= 0 && src_row_l <= stretch_height) { | 426 if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_
l >= 0 && src_row_l <= stretch_height) { |
| 427 int pos_pixel[8]; | 427 int pos_pixel[8]; |
| 428 int u_w[4], v_w[4]; | 428 int u_w[4], v_w[4]; |
| 429 if (src_col_l == stretch_width) { | 429 if (src_col_l == stretch_width) { |
| 430 src_col_l--; | 430 src_col_l--; |
| 431 } | 431 } |
| 432 if (src_row_l == stretch_height) { | 432 if (src_row_l == stretch_height) { |
| 433 src_row_l--; | 433 src_row_l--; |
| 434 } | 434 } |
| 435 _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col_l,
src_row_l, res_x, res_y, stretch_width, stretch_height); | 435 _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col_l,
src_row_l, res_x, res_y, stretch_width, stretch_height); |
| 436 *dest_pos_mask = _bicubic_interpol(stretch_buf_mask, str
etch_pitch_mask, pos_pixel, u_w, v_w, res_x, res_y, 1, 0); | 436 *dest_pos_mask = _bicubic_interpol(stretch_buf_mask, str
etch_pitch_mask, pos_pixel, u_w, v_w, res_x, res_y, 1, 0); |
| 437 } | 437 } |
| 438 dest_pos_mask++; | 438 dest_pos_mask++; |
| 439 } | 439 } |
| 440 } | 440 } |
| 441 } else { | 441 } else { |
| 442 CPDF_FixedMatrix result2stretch_fix(result2stretch, 8); | 442 CPDF_FixedMatrix result2stretch_fix(result2stretch, 8); |
| 443 for (int row = 0; row < m_ResultHeight; row ++) { | 443 for (int row = 0; row < m_ResultHeight; row ++) { |
| 444 FX_BYTE* dest_pos_mask = (FX_BYTE*)pTransformed->m_pAlphaMask->G
etScanline(row); | 444 uint8_t* dest_pos_mask = (uint8_t*)pTransformed->m_pAlphaMask->G
etScanline(row); |
| 445 for (int col = 0; col < m_ResultWidth; col ++) { | 445 for (int col = 0; col < m_ResultWidth; col ++) { |
| 446 int src_col, src_row; | 446 int src_col, src_row; |
| 447 result2stretch_fix.Transform(col, row, src_col, src_row); | 447 result2stretch_fix.Transform(col, row, src_col, src_row); |
| 448 if (src_col >= 0 && src_col <= stretch_width && src_row >= 0
&& src_row <= stretch_height) { | 448 if (src_col >= 0 && src_col <= stretch_width && src_row >= 0
&& src_row <= stretch_height) { |
| 449 if (src_col == stretch_width) { | 449 if (src_col == stretch_width) { |
| 450 src_col --; | 450 src_col --; |
| 451 } | 451 } |
| 452 if (src_row == stretch_height) { | 452 if (src_row == stretch_height) { |
| 453 src_row --; | 453 src_row --; |
| 454 } | 454 } |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 548 argb[i] = 255 - i; | 548 argb[i] = 255 - i; |
| 549 } | 549 } |
| 550 else | 550 else |
| 551 for (int i = 0; i < 256; i ++) { | 551 for (int i = 0; i < 256; i ++) { |
| 552 argb[i] = 0xff000000 | (i * 0x010101); | 552 argb[i] = 0xff000000 | (i * 0x010101); |
| 553 } | 553 } |
| 554 } | 554 } |
| 555 if (!(m_Flags & FXDIB_DOWNSAMPLE) && !(m_Flags & FXDIB_BICUBIC_INTER
POL)) { | 555 if (!(m_Flags & FXDIB_DOWNSAMPLE) && !(m_Flags & FXDIB_BICUBIC_INTER
POL)) { |
| 556 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); | 556 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); |
| 557 for (int row = 0; row < m_ResultHeight; row ++) { | 557 for (int row = 0; row < m_ResultHeight; row ++) { |
| 558 FX_BYTE* dest_pos = (FX_BYTE*)pTransformed->GetScanline(row)
; | 558 uint8_t* dest_pos = (uint8_t*)pTransformed->GetScanline(row)
; |
| 559 for (int col = 0; col < m_ResultWidth; col ++) { | 559 for (int col = 0; col < m_ResultWidth; col ++) { |
| 560 int src_col_l, src_row_l, res_x, res_y; | 560 int src_col_l, src_row_l, res_x, res_y; |
| 561 result2stretch_fix.Transform(col, row, src_col_l, src_ro
w_l, res_x, res_y); | 561 result2stretch_fix.Transform(col, row, src_col_l, src_ro
w_l, res_x, res_y); |
| 562 if (src_col_l >= 0 && src_col_l <= stretch_width && src_
row_l >= 0 && src_row_l <= stretch_height) { | 562 if (src_col_l >= 0 && src_col_l <= stretch_width && src_
row_l >= 0 && src_row_l <= stretch_height) { |
| 563 if (src_col_l == stretch_width) { | 563 if (src_col_l == stretch_width) { |
| 564 src_col_l--; | 564 src_col_l--; |
| 565 } | 565 } |
| 566 if (src_row_l == stretch_height) { | 566 if (src_row_l == stretch_height) { |
| 567 src_row_l--; | 567 src_row_l--; |
| 568 } | 568 } |
| 569 int src_col_r = src_col_l + 1; | 569 int src_col_r = src_col_l + 1; |
| 570 int src_row_r = src_row_l + 1; | 570 int src_row_r = src_row_l + 1; |
| 571 if (src_col_r == stretch_width) { | 571 if (src_col_r == stretch_width) { |
| 572 src_col_r--; | 572 src_col_r--; |
| 573 } | 573 } |
| 574 if (src_row_r == stretch_height) { | 574 if (src_row_r == stretch_height) { |
| 575 src_row_r--; | 575 src_row_r--; |
| 576 } | 576 } |
| 577 int row_offset_l = src_row_l * stretch_pitch; | 577 int row_offset_l = src_row_l * stretch_pitch; |
| 578 int row_offset_r = src_row_r * stretch_pitch; | 578 int row_offset_r = src_row_r * stretch_pitch; |
| 579 FX_DWORD r_bgra_cmyk = argb[_bilinear_interpol(stret
ch_buf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, 1, 0)]; | 579 FX_DWORD r_bgra_cmyk = argb[_bilinear_interpol(stret
ch_buf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, 1, 0)]; |
| 580 if (transformF == FXDIB_Rgba) { | 580 if (transformF == FXDIB_Rgba) { |
| 581 dest_pos[0] = (FX_BYTE)(r_bgra_cmyk >> 24); | 581 dest_pos[0] = (uint8_t)(r_bgra_cmyk >> 24); |
| 582 dest_pos[1] = (FX_BYTE)(r_bgra_cmyk >> 16); | 582 dest_pos[1] = (uint8_t)(r_bgra_cmyk >> 16); |
| 583 dest_pos[2] = (FX_BYTE)(r_bgra_cmyk >> 8); | 583 dest_pos[2] = (uint8_t)(r_bgra_cmyk >> 8); |
| 584 } else { | 584 } else { |
| 585 *(FX_DWORD*)dest_pos = r_bgra_cmyk; | 585 *(FX_DWORD*)dest_pos = r_bgra_cmyk; |
| 586 } | 586 } |
| 587 } | 587 } |
| 588 dest_pos += destBpp; | 588 dest_pos += destBpp; |
| 589 } | 589 } |
| 590 } | 590 } |
| 591 } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) { | 591 } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) { |
| 592 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); | 592 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); |
| 593 for (int row = 0; row < m_ResultHeight; row ++) { | 593 for (int row = 0; row < m_ResultHeight; row ++) { |
| 594 FX_BYTE* dest_pos = (FX_BYTE*)pTransformed->GetScanline(row)
; | 594 uint8_t* dest_pos = (uint8_t*)pTransformed->GetScanline(row)
; |
| 595 for (int col = 0; col < m_ResultWidth; col ++) { | 595 for (int col = 0; col < m_ResultWidth; col ++) { |
| 596 int src_col_l, src_row_l, res_x, res_y; | 596 int src_col_l, src_row_l, res_x, res_y; |
| 597 result2stretch_fix.Transform(col, row, src_col_l, src_ro
w_l, res_x, res_y); | 597 result2stretch_fix.Transform(col, row, src_col_l, src_ro
w_l, res_x, res_y); |
| 598 if (src_col_l >= 0 && src_col_l <= stretch_width && src_
row_l >= 0 && src_row_l <= stretch_height) { | 598 if (src_col_l >= 0 && src_col_l <= stretch_width && src_
row_l >= 0 && src_row_l <= stretch_height) { |
| 599 int pos_pixel[8]; | 599 int pos_pixel[8]; |
| 600 int u_w[4], v_w[4]; | 600 int u_w[4], v_w[4]; |
| 601 if (src_col_l == stretch_width) { | 601 if (src_col_l == stretch_width) { |
| 602 src_col_l--; | 602 src_col_l--; |
| 603 } | 603 } |
| 604 if (src_row_l == stretch_height) { | 604 if (src_row_l == stretch_height) { |
| 605 src_row_l--; | 605 src_row_l--; |
| 606 } | 606 } |
| 607 _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col
_l, src_row_l, res_x, res_y, stretch_width, stretch_height); | 607 _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col
_l, src_row_l, res_x, res_y, stretch_width, stretch_height); |
| 608 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)]; | 608 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)]; |
| 609 if (transformF == FXDIB_Rgba) { | 609 if (transformF == FXDIB_Rgba) { |
| 610 dest_pos[0] = (FX_BYTE)(r_bgra_cmyk >> 24); | 610 dest_pos[0] = (uint8_t)(r_bgra_cmyk >> 24); |
| 611 dest_pos[1] = (FX_BYTE)(r_bgra_cmyk >> 16); | 611 dest_pos[1] = (uint8_t)(r_bgra_cmyk >> 16); |
| 612 dest_pos[2] = (FX_BYTE)(r_bgra_cmyk >> 8); | 612 dest_pos[2] = (uint8_t)(r_bgra_cmyk >> 8); |
| 613 } else { | 613 } else { |
| 614 *(FX_DWORD*)dest_pos = r_bgra_cmyk; | 614 *(FX_DWORD*)dest_pos = r_bgra_cmyk; |
| 615 } | 615 } |
| 616 } | 616 } |
| 617 dest_pos += destBpp; | 617 dest_pos += destBpp; |
| 618 } | 618 } |
| 619 } | 619 } |
| 620 } else { | 620 } else { |
| 621 CPDF_FixedMatrix result2stretch_fix(result2stretch, 8); | 621 CPDF_FixedMatrix result2stretch_fix(result2stretch, 8); |
| 622 for (int row = 0; row < m_ResultHeight; row ++) { | 622 for (int row = 0; row < m_ResultHeight; row ++) { |
| 623 FX_BYTE* dest_pos = (FX_BYTE*)pTransformed->GetScanline(row)
; | 623 uint8_t* dest_pos = (uint8_t*)pTransformed->GetScanline(row)
; |
| 624 for (int col = 0; col < m_ResultWidth; col ++) { | 624 for (int col = 0; col < m_ResultWidth; col ++) { |
| 625 int src_col, src_row; | 625 int src_col, src_row; |
| 626 result2stretch_fix.Transform(col, row, src_col, src_row)
; | 626 result2stretch_fix.Transform(col, row, src_col, src_row)
; |
| 627 if (src_col >= 0 && src_col <= stretch_width && src_row
>= 0 && src_row <= stretch_height) { | 627 if (src_col >= 0 && src_col <= stretch_width && src_row
>= 0 && src_row <= stretch_height) { |
| 628 if (src_col == stretch_width) { | 628 if (src_col == stretch_width) { |
| 629 src_col --; | 629 src_col --; |
| 630 } | 630 } |
| 631 if (src_row == stretch_height) { | 631 if (src_row == stretch_height) { |
| 632 src_row --; | 632 src_row --; |
| 633 } | 633 } |
| 634 FX_DWORD r_bgra_cmyk = argb[stretch_buf[src_row * st
retch_pitch + src_col]]; | 634 FX_DWORD r_bgra_cmyk = argb[stretch_buf[src_row * st
retch_pitch + src_col]]; |
| 635 if (transformF == FXDIB_Rgba) { | 635 if (transformF == FXDIB_Rgba) { |
| 636 dest_pos[0] = (FX_BYTE)(r_bgra_cmyk >> 24); | 636 dest_pos[0] = (uint8_t)(r_bgra_cmyk >> 24); |
| 637 dest_pos[1] = (FX_BYTE)(r_bgra_cmyk >> 16); | 637 dest_pos[1] = (uint8_t)(r_bgra_cmyk >> 16); |
| 638 dest_pos[2] = (FX_BYTE)(r_bgra_cmyk >> 8); | 638 dest_pos[2] = (uint8_t)(r_bgra_cmyk >> 8); |
| 639 } else { | 639 } else { |
| 640 *(FX_DWORD*)dest_pos = r_bgra_cmyk; | 640 *(FX_DWORD*)dest_pos = r_bgra_cmyk; |
| 641 } | 641 } |
| 642 } | 642 } |
| 643 dest_pos += destBpp; | 643 dest_pos += destBpp; |
| 644 } | 644 } |
| 645 } | 645 } |
| 646 } | 646 } |
| 647 } else { | 647 } else { |
| 648 FX_BOOL bHasAlpha = m_Storer.GetBitmap()->HasAlpha(); | 648 FX_BOOL bHasAlpha = m_Storer.GetBitmap()->HasAlpha(); |
| 649 int destBpp = pTransformed->GetBPP() / 8; | 649 int destBpp = pTransformed->GetBPP() / 8; |
| 650 if (!(m_Flags & FXDIB_DOWNSAMPLE) && !(m_Flags & FXDIB_BICUBIC_INTER
POL)) { | 650 if (!(m_Flags & FXDIB_DOWNSAMPLE) && !(m_Flags & FXDIB_BICUBIC_INTER
POL)) { |
| 651 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); | 651 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); |
| 652 for (int row = 0; row < m_ResultHeight; row ++) { | 652 for (int row = 0; row < m_ResultHeight; row ++) { |
| 653 FX_BYTE* dest_pos = (FX_BYTE*)pTransformed->GetScanline(row)
; | 653 uint8_t* dest_pos = (uint8_t*)pTransformed->GetScanline(row)
; |
| 654 for (int col = 0; col < m_ResultWidth; col ++) { | 654 for (int col = 0; col < m_ResultWidth; col ++) { |
| 655 int src_col_l, src_row_l, res_x, res_y, r_pos_k_r = 0; | 655 int src_col_l, src_row_l, res_x, res_y, r_pos_k_r = 0; |
| 656 result2stretch_fix.Transform(col, row, src_col_l, src_ro
w_l, res_x, res_y); | 656 result2stretch_fix.Transform(col, row, src_col_l, src_ro
w_l, res_x, res_y); |
| 657 if (src_col_l >= 0 && src_col_l <= stretch_width && src_
row_l >= 0 && src_row_l <= stretch_height) { | 657 if (src_col_l >= 0 && src_col_l <= stretch_width && src_
row_l >= 0 && src_row_l <= stretch_height) { |
| 658 if (src_col_l == stretch_width) { | 658 if (src_col_l == stretch_width) { |
| 659 src_col_l--; | 659 src_col_l--; |
| 660 } | 660 } |
| 661 if (src_row_l == stretch_height) { | 661 if (src_row_l == stretch_height) { |
| 662 src_row_l--; | 662 src_row_l--; |
| 663 } | 663 } |
| 664 int src_col_r = src_col_l + 1; | 664 int src_col_r = src_col_l + 1; |
| 665 int src_row_r = src_row_l + 1; | 665 int src_row_r = src_row_l + 1; |
| 666 if (src_col_r == stretch_width) { | 666 if (src_col_r == stretch_width) { |
| 667 src_col_r--; | 667 src_col_r--; |
| 668 } | 668 } |
| 669 if (src_row_r == stretch_height) { | 669 if (src_row_r == stretch_height) { |
| 670 src_row_r--; | 670 src_row_r--; |
| 671 } | 671 } |
| 672 int row_offset_l = src_row_l * stretch_pitch; | 672 int row_offset_l = src_row_l * stretch_pitch; |
| 673 int row_offset_r = src_row_r * stretch_pitch; | 673 int row_offset_r = src_row_r * stretch_pitch; |
| 674 FX_BYTE r_pos_red_y_r = _bilinear_interpol(stretch
_buf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, Bpp, 2); | 674 uint8_t r_pos_red_y_r = _bilinear_interpol(stretch
_buf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, Bpp, 2); |
| 675 FX_BYTE r_pos_green_m_r = _bilinear_interpol(stretch
_buf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, Bpp, 1); | 675 uint8_t r_pos_green_m_r = _bilinear_interpol(stretch
_buf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, Bpp, 1); |
| 676 FX_BYTE r_pos_blue_c_r = _bilinear_interpol(stretch
_buf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, Bpp, 0); | 676 uint8_t r_pos_blue_c_r = _bilinear_interpol(stretch
_buf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, Bpp, 0); |
| 677 if (bHasAlpha) { | 677 if (bHasAlpha) { |
| 678 if (transformF != FXDIB_Argb) { | 678 if (transformF != FXDIB_Argb) { |
| 679 if (transformF == FXDIB_Rgba) { | 679 if (transformF == FXDIB_Rgba) { |
| 680 dest_pos[0] = r_pos_blue_c_r; | 680 dest_pos[0] = r_pos_blue_c_r; |
| 681 dest_pos[1] = r_pos_green_m_r; | 681 dest_pos[1] = r_pos_green_m_r; |
| 682 dest_pos[2] = r_pos_red_y_r; | 682 dest_pos[2] = r_pos_red_y_r; |
| 683 } else { | 683 } else { |
| 684 r_pos_k_r = _bilinear_interpol(stretch_b
uf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, Bpp, 3); | 684 r_pos_k_r = _bilinear_interpol(stretch_b
uf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, Bpp, 3); |
| 685 *(FX_DWORD*)dest_pos = FXCMYK_TODIB(Cmyk
Encode(r_pos_blue_c_r, r_pos_green_m_r, r_pos_red_y_r, r_pos_k_r)); | 685 *(FX_DWORD*)dest_pos = FXCMYK_TODIB(Cmyk
Encode(r_pos_blue_c_r, r_pos_green_m_r, r_pos_red_y_r, r_pos_k_r)); |
| 686 } | 686 } |
| 687 } else { | 687 } else { |
| 688 FX_BYTE r_pos_a_r = _bilinear_interpol(stret
ch_buf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, Bpp, 3); | 688 uint8_t r_pos_a_r = _bilinear_interpol(stret
ch_buf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, Bpp, 3); |
| 689 *(FX_DWORD*)dest_pos = FXARGB_TODIB(FXARGB_M
AKE(r_pos_a_r, r_pos_red_y_r, r_pos_green_m_r, r_pos_blue_c_r)); | 689 *(FX_DWORD*)dest_pos = FXARGB_TODIB(FXARGB_M
AKE(r_pos_a_r, r_pos_red_y_r, r_pos_green_m_r, r_pos_blue_c_r)); |
| 690 } | 690 } |
| 691 } else { | 691 } else { |
| 692 r_pos_k_r = 0xff; | 692 r_pos_k_r = 0xff; |
| 693 if (transformF == FXDIB_Cmyka) { | 693 if (transformF == FXDIB_Cmyka) { |
| 694 r_pos_k_r = _bilinear_interpol(stretch_buf,
row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, Bpp, 3); | 694 r_pos_k_r = _bilinear_interpol(stretch_buf,
row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, Bpp, 3); |
| 695 *(FX_DWORD*)dest_pos = FXCMYK_TODIB(CmykEnco
de(r_pos_blue_c_r, r_pos_green_m_r, r_pos_red_y_r, r_pos_k_r)); | 695 *(FX_DWORD*)dest_pos = FXCMYK_TODIB(CmykEnco
de(r_pos_blue_c_r, r_pos_green_m_r, r_pos_red_y_r, r_pos_k_r)); |
| 696 } else { | 696 } else { |
| 697 *(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)); | 697 *(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)); |
| 698 } | 698 } |
| 699 } | 699 } |
| 700 } | 700 } |
| 701 dest_pos += destBpp; | 701 dest_pos += destBpp; |
| 702 } | 702 } |
| 703 } | 703 } |
| 704 } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) { | 704 } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) { |
| 705 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); | 705 CFX_BilinearMatrix result2stretch_fix(result2stretch, 8); |
| 706 for (int row = 0; row < m_ResultHeight; row ++) { | 706 for (int row = 0; row < m_ResultHeight; row ++) { |
| 707 FX_BYTE* dest_pos = (FX_BYTE*)pTransformed->GetScanline(row)
; | 707 uint8_t* dest_pos = (uint8_t*)pTransformed->GetScanline(row)
; |
| 708 for (int col = 0; col < m_ResultWidth; col ++) { | 708 for (int col = 0; col < m_ResultWidth; col ++) { |
| 709 int src_col_l, src_row_l, res_x, res_y, r_pos_k_r = 0; | 709 int src_col_l, src_row_l, res_x, res_y, r_pos_k_r = 0; |
| 710 result2stretch_fix.Transform(col, row, src_col_l, src_ro
w_l, res_x, res_y); | 710 result2stretch_fix.Transform(col, row, src_col_l, src_ro
w_l, res_x, res_y); |
| 711 if (src_col_l >= 0 && src_col_l <= stretch_width && src_
row_l >= 0 && src_row_l <= stretch_height) { | 711 if (src_col_l >= 0 && src_col_l <= stretch_width && src_
row_l >= 0 && src_row_l <= stretch_height) { |
| 712 int pos_pixel[8]; | 712 int pos_pixel[8]; |
| 713 int u_w[4], v_w[4]; | 713 int u_w[4], v_w[4]; |
| 714 if (src_col_l == stretch_width) { | 714 if (src_col_l == stretch_width) { |
| 715 src_col_l--; | 715 src_col_l--; |
| 716 } | 716 } |
| 717 if (src_row_l == stretch_height) { | 717 if (src_row_l == stretch_height) { |
| 718 src_row_l--; | 718 src_row_l--; |
| 719 } | 719 } |
| 720 _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col
_l, src_row_l, res_x, res_y, stretch_width, stretch_height); | 720 _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col
_l, src_row_l, res_x, res_y, stretch_width, stretch_height); |
| 721 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); | 721 uint8_t r_pos_red_y_r = _bicubic_interpol(stretch_
buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 2); |
| 722 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); | 722 uint8_t r_pos_green_m_r = _bicubic_interpol(stretch_
buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 1); |
| 723 FX_BYTE r_pos_blue_c_r = _bicubic_interpol(stretch_
buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 0); | 723 uint8_t r_pos_blue_c_r = _bicubic_interpol(stretch_
buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 0); |
| 724 if (bHasAlpha) { | 724 if (bHasAlpha) { |
| 725 if (transformF != FXDIB_Argb) { | 725 if (transformF != FXDIB_Argb) { |
| 726 if (transformF == FXDIB_Rgba) { | 726 if (transformF == FXDIB_Rgba) { |
| 727 dest_pos[0] = r_pos_blue_c_r; | 727 dest_pos[0] = r_pos_blue_c_r; |
| 728 dest_pos[1] = r_pos_green_m_r; | 728 dest_pos[1] = r_pos_green_m_r; |
| 729 dest_pos[2] = r_pos_red_y_r; | 729 dest_pos[2] = r_pos_red_y_r; |
| 730 } else { | 730 } else { |
| 731 r_pos_k_r = _bicubic_interpol(stretch_bu
f, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 3); | 731 r_pos_k_r = _bicubic_interpol(stretch_bu
f, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 3); |
| 732 *(FX_DWORD*)dest_pos = FXCMYK_TODIB(Cmyk
Encode(r_pos_blue_c_r, r_pos_green_m_r, r_pos_red_y_r, r_pos_k_r)); | 732 *(FX_DWORD*)dest_pos = FXCMYK_TODIB(Cmyk
Encode(r_pos_blue_c_r, r_pos_green_m_r, r_pos_red_y_r, r_pos_k_r)); |
| 733 } | 733 } |
| 734 } else { | 734 } else { |
| 735 FX_BYTE r_pos_a_r = _bicubic_interpol(stretc
h_buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 3); | 735 uint8_t r_pos_a_r = _bicubic_interpol(stretc
h_buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 3); |
| 736 *(FX_DWORD*)dest_pos = FXARGB_TODIB(FXARGB_M
AKE(r_pos_a_r, r_pos_red_y_r, r_pos_green_m_r, r_pos_blue_c_r)); | 736 *(FX_DWORD*)dest_pos = FXARGB_TODIB(FXARGB_M
AKE(r_pos_a_r, r_pos_red_y_r, r_pos_green_m_r, r_pos_blue_c_r)); |
| 737 } | 737 } |
| 738 } else { | 738 } else { |
| 739 r_pos_k_r = 0xff; | 739 r_pos_k_r = 0xff; |
| 740 if (transformF == FXDIB_Cmyka) { | 740 if (transformF == FXDIB_Cmyka) { |
| 741 r_pos_k_r = _bicubic_interpol(stretch_buf, s
tretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 3); | 741 r_pos_k_r = _bicubic_interpol(stretch_buf, s
tretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 3); |
| 742 *(FX_DWORD*)dest_pos = FXCMYK_TODIB(CmykEnco
de(r_pos_blue_c_r, r_pos_green_m_r, r_pos_red_y_r, r_pos_k_r)); | 742 *(FX_DWORD*)dest_pos = FXCMYK_TODIB(CmykEnco
de(r_pos_blue_c_r, r_pos_green_m_r, r_pos_red_y_r, r_pos_k_r)); |
| 743 } else { | 743 } else { |
| 744 *(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)); | 744 *(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)); |
| 745 } | 745 } |
| 746 } | 746 } |
| 747 } | 747 } |
| 748 dest_pos += destBpp; | 748 dest_pos += destBpp; |
| 749 } | 749 } |
| 750 } | 750 } |
| 751 } else { | 751 } else { |
| 752 CPDF_FixedMatrix result2stretch_fix(result2stretch, 8); | 752 CPDF_FixedMatrix result2stretch_fix(result2stretch, 8); |
| 753 for (int row = 0; row < m_ResultHeight; row ++) { | 753 for (int row = 0; row < m_ResultHeight; row ++) { |
| 754 FX_BYTE* dest_pos = (FX_BYTE*)pTransformed->GetScanline(row)
; | 754 uint8_t* dest_pos = (uint8_t*)pTransformed->GetScanline(row)
; |
| 755 for (int col = 0; col < m_ResultWidth; col ++) { | 755 for (int col = 0; col < m_ResultWidth; col ++) { |
| 756 int src_col, src_row; | 756 int src_col, src_row; |
| 757 result2stretch_fix.Transform(col, row, src_col, src_row)
; | 757 result2stretch_fix.Transform(col, row, src_col, src_row)
; |
| 758 if (src_col >= 0 && src_col <= stretch_width && src_row
>= 0 && src_row <= stretch_height) { | 758 if (src_col >= 0 && src_col <= stretch_width && src_row
>= 0 && src_row <= stretch_height) { |
| 759 if (src_col == stretch_width) { | 759 if (src_col == stretch_width) { |
| 760 src_col --; | 760 src_col --; |
| 761 } | 761 } |
| 762 if (src_row == stretch_height) { | 762 if (src_row == stretch_height) { |
| 763 src_row --; | 763 src_row --; |
| 764 } | 764 } |
| (...skipping 20 matching lines...) Expand all Loading... |
| 785 } | 785 } |
| 786 dest_pos += destBpp; | 786 dest_pos += destBpp; |
| 787 } | 787 } |
| 788 } | 788 } |
| 789 } | 789 } |
| 790 } | 790 } |
| 791 } | 791 } |
| 792 m_Storer.Replace(pTransformed); | 792 m_Storer.Replace(pTransformed); |
| 793 return FALSE; | 793 return FALSE; |
| 794 } | 794 } |
| OLD | NEW |