Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: core/src/fxge/dib/fx_dib_transform.cpp

Issue 1172793002: Merge to XFA: Use stdint.h types throughout PDFium. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/src/fxge/dib/fx_dib_main.cpp ('k') | core/src/fxge/ge/fx_ge.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « core/src/fxge/dib/fx_dib_main.cpp ('k') | core/src/fxge/ge/fx_ge.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698