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