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

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

Issue 1177483002: Use stdint.h types throughout PDFium. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
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 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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 }
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