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 |