| 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 "core/include/fxcodec/fx_codec.h" | 7 #include "core/include/fxcodec/fx_codec.h" |
| 8 #include "core/include/fxge/fx_ge.h" | 8 #include "core/include/fxge/fx_ge.h" |
| 9 #include "core/src/fxge/dib/dib_int.h" | 9 #include "core/src/fxge/dib/dib_int.h" |
| 10 | 10 |
| (...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 } | 278 } |
| 279 } | 279 } |
| 280 void _CompositeRow_Argb2Graya(uint8_t* dest_scan, | 280 void _CompositeRow_Argb2Graya(uint8_t* dest_scan, |
| 281 const uint8_t* src_scan, | 281 const uint8_t* src_scan, |
| 282 int pixel_count, | 282 int pixel_count, |
| 283 int blend_type, | 283 int blend_type, |
| 284 const uint8_t* clip_scan, | 284 const uint8_t* clip_scan, |
| 285 const uint8_t* src_alpha_scan, | 285 const uint8_t* src_alpha_scan, |
| 286 uint8_t* dst_alpha_scan, | 286 uint8_t* dst_alpha_scan, |
| 287 void* pIccTransform) { | 287 void* pIccTransform) { |
| 288 ICodec_IccModule* pIccModule = NULL; | 288 ICodec_IccModule* pIccModule = nullptr; |
| 289 if (pIccTransform) { | 289 if (pIccTransform) |
| 290 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); | 290 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); |
| 291 } | 291 |
| 292 if (blend_type) { | 292 if (blend_type) { |
| 293 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 293 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 294 int blended_color; | 294 int blended_color; |
| 295 if (src_alpha_scan) { | 295 if (src_alpha_scan) { |
| 296 for (int col = 0; col < pixel_count; col++) { | 296 for (int col = 0; col < pixel_count; col++) { |
| 297 uint8_t back_alpha = *dst_alpha_scan; | 297 uint8_t back_alpha = *dst_alpha_scan; |
| 298 if (back_alpha == 0) { | 298 if (back_alpha == 0) { |
| 299 int src_alpha = *src_alpha_scan++; | 299 int src_alpha = *src_alpha_scan++; |
| 300 if (clip_scan) { | 300 if (clip_scan) |
| 301 src_alpha = clip_scan[col] * src_alpha / 255; | 301 src_alpha = clip_scan[col] * src_alpha / 255; |
| 302 } | 302 |
| 303 if (src_alpha) { | 303 if (src_alpha) { |
| 304 if (pIccTransform) { | 304 if (pIccTransform) { |
| 305 pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, | 305 pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, |
| 306 1); | 306 1); |
| 307 } else { | 307 } else { |
| 308 *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); | 308 *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); |
| 309 } | 309 } |
| 310 *dst_alpha_scan = src_alpha; | 310 *dst_alpha_scan = src_alpha; |
| 311 } | 311 } |
| 312 dest_scan++; | 312 dest_scan++; |
| 313 dst_alpha_scan++; | 313 dst_alpha_scan++; |
| 314 src_scan += 3; | 314 src_scan += 3; |
| 315 continue; | 315 continue; |
| 316 } | 316 } |
| 317 uint8_t src_alpha = *src_alpha_scan++; | 317 uint8_t src_alpha = *src_alpha_scan++; |
| 318 if (clip_scan) { | 318 if (clip_scan) |
| 319 src_alpha = clip_scan[col] * src_alpha / 255; | 319 src_alpha = clip_scan[col] * src_alpha / 255; |
| 320 } | 320 |
| 321 if (src_alpha == 0) { | 321 if (src_alpha == 0) { |
| 322 dest_scan++; | 322 dest_scan++; |
| 323 dst_alpha_scan++; | 323 dst_alpha_scan++; |
| 324 src_scan += 3; | 324 src_scan += 3; |
| 325 continue; | 325 continue; |
| 326 } | 326 } |
| 327 *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha); | 327 *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha); |
| 328 int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan); | 328 int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan); |
| 329 uint8_t gray; | 329 uint8_t gray; |
| 330 if (pIccTransform) { | 330 if (pIccTransform) { |
| 331 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); | 331 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); |
| 332 } else { | 332 } else { |
| 333 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); | 333 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); |
| 334 } | 334 } |
| 335 if (bNonseparableBlend) { | 335 if (bNonseparableBlend) { |
| 336 blended_color = | 336 blended_color = |
| 337 blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan; | 337 blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan; |
| 338 } | 338 } |
| 339 gray = bNonseparableBlend ? blended_color | 339 gray = bNonseparableBlend ? blended_color |
| 340 : _BLEND(blend_type, *dest_scan, gray); | 340 : _BLEND(blend_type, *dest_scan, gray); |
| 341 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); | 341 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); |
| 342 dest_scan++; | 342 dest_scan++; |
| 343 dst_alpha_scan++; | 343 dst_alpha_scan++; |
| 344 src_scan += 3; | 344 src_scan += 3; |
| 345 } | 345 } |
| 346 } else | 346 } else { |
| 347 for (int col = 0; col < pixel_count; col++) { | 347 for (int col = 0; col < pixel_count; col++) { |
| 348 uint8_t back_alpha = *dst_alpha_scan; | 348 uint8_t back_alpha = *dst_alpha_scan; |
| 349 if (back_alpha == 0) { | 349 if (back_alpha == 0) { |
| 350 int src_alpha = src_scan[3]; | 350 int src_alpha = src_scan[3]; |
| 351 if (clip_scan) { | 351 if (clip_scan) |
| 352 src_alpha = clip_scan[col] * src_alpha / 255; | 352 src_alpha = clip_scan[col] * src_alpha / 255; |
| 353 } | 353 |
| 354 if (src_alpha) { | 354 if (src_alpha) { |
| 355 if (pIccTransform) { | 355 if (pIccTransform) { |
| 356 pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, | 356 pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, |
| 357 1); | 357 1); |
| 358 } else { | 358 } else { |
| 359 *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); | 359 *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); |
| 360 } | 360 } |
| 361 *dst_alpha_scan = src_alpha; | 361 *dst_alpha_scan = src_alpha; |
| 362 } | 362 } |
| 363 dest_scan++; | 363 dest_scan++; |
| 364 dst_alpha_scan++; | 364 dst_alpha_scan++; |
| 365 src_scan += 4; | 365 src_scan += 4; |
| 366 continue; | 366 continue; |
| 367 } | 367 } |
| 368 uint8_t src_alpha = src_scan[3]; | 368 uint8_t src_alpha = src_scan[3]; |
| 369 if (clip_scan) { | 369 if (clip_scan) |
| 370 src_alpha = clip_scan[col] * src_alpha / 255; | 370 src_alpha = clip_scan[col] * src_alpha / 255; |
| 371 } | 371 |
| 372 if (src_alpha == 0) { | 372 if (src_alpha == 0) { |
| 373 dest_scan++; | 373 dest_scan++; |
| 374 dst_alpha_scan++; | 374 dst_alpha_scan++; |
| 375 src_scan += 4; | 375 src_scan += 4; |
| 376 continue; | 376 continue; |
| 377 } | 377 } |
| 378 *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha); | 378 *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha); |
| 379 int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan); | 379 int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan); |
| 380 uint8_t gray; | 380 uint8_t gray; |
| 381 if (pIccTransform) { | 381 if (pIccTransform) |
| 382 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); | 382 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); |
| 383 } else { | 383 else |
| 384 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); | 384 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); |
| 385 } | 385 |
| 386 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); | 386 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); |
| 387 dest_scan++; | 387 dest_scan++; |
| 388 dst_alpha_scan++; | 388 dst_alpha_scan++; |
| 389 src_scan += 4; | 389 src_scan += 4; |
| 390 } | 390 } |
| 391 } |
| 391 return; | 392 return; |
| 392 } | 393 } |
| 393 if (src_alpha_scan) { | 394 if (src_alpha_scan) { |
| 394 for (int col = 0; col < pixel_count; col++) { | 395 for (int col = 0; col < pixel_count; col++) { |
| 395 uint8_t back_alpha = *dst_alpha_scan; | 396 uint8_t back_alpha = *dst_alpha_scan; |
| 396 if (back_alpha == 0) { | 397 if (back_alpha == 0) { |
| 397 int src_alpha = *src_alpha_scan++; | 398 int src_alpha = *src_alpha_scan++; |
| 398 if (clip_scan) { | 399 if (clip_scan) |
| 399 src_alpha = clip_scan[col] * src_alpha / 255; | 400 src_alpha = clip_scan[col] * src_alpha / 255; |
| 400 } | 401 |
| 401 if (src_alpha) { | 402 if (src_alpha) { |
| 402 if (pIccTransform) { | 403 if (pIccTransform) { |
| 403 pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, | 404 pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, |
| 404 1); | 405 1); |
| 405 } else { | 406 } else { |
| 406 *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); | 407 *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); |
| 407 } | 408 } |
| 408 *dst_alpha_scan = src_alpha; | 409 *dst_alpha_scan = src_alpha; |
| 409 } | 410 } |
| 410 dest_scan++; | 411 dest_scan++; |
| 411 dst_alpha_scan++; | 412 dst_alpha_scan++; |
| 412 src_scan += 3; | 413 src_scan += 3; |
| 413 continue; | 414 continue; |
| 414 } | 415 } |
| 415 uint8_t src_alpha = *src_alpha_scan++; | 416 uint8_t src_alpha = *src_alpha_scan++; |
| 416 if (clip_scan) { | 417 if (clip_scan) |
| 417 src_alpha = clip_scan[col] * src_alpha / 255; | 418 src_alpha = clip_scan[col] * src_alpha / 255; |
| 418 } | 419 |
| 419 if (src_alpha == 0) { | 420 if (src_alpha == 0) { |
| 420 dest_scan++; | 421 dest_scan++; |
| 421 dst_alpha_scan++; | 422 dst_alpha_scan++; |
| 422 src_scan += 3; | 423 src_scan += 3; |
| 423 continue; | 424 continue; |
| 424 } | 425 } |
| 425 *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha); | 426 *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha); |
| 426 int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan); | 427 int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan); |
| 427 uint8_t gray; | 428 uint8_t gray; |
| 428 if (pIccTransform) { | 429 if (pIccTransform) |
| 429 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); | 430 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); |
| 430 } else { | 431 else |
| 431 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); | 432 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); |
| 432 } | 433 |
| 433 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); | 434 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); |
| 434 dest_scan++; | 435 dest_scan++; |
| 435 dst_alpha_scan++; | 436 dst_alpha_scan++; |
| 436 src_scan += 3; | 437 src_scan += 3; |
| 437 } | 438 } |
| 438 } else | 439 } else { |
| 439 for (int col = 0; col < pixel_count; col++) { | 440 for (int col = 0; col < pixel_count; col++) { |
| 440 uint8_t back_alpha = *dst_alpha_scan; | 441 uint8_t back_alpha = *dst_alpha_scan; |
| 441 if (back_alpha == 0) { | 442 if (back_alpha == 0) { |
| 442 int src_alpha = src_scan[3]; | 443 int src_alpha = src_scan[3]; |
| 443 if (clip_scan) { | 444 if (clip_scan) |
| 444 src_alpha = clip_scan[col] * src_alpha / 255; | 445 src_alpha = clip_scan[col] * src_alpha / 255; |
| 445 } | 446 |
| 446 if (src_alpha) { | 447 if (src_alpha) { |
| 447 if (pIccTransform) { | 448 if (pIccTransform) { |
| 448 pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, | 449 pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, |
| 449 1); | 450 1); |
| 450 } else { | 451 } else { |
| 451 *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); | 452 *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); |
| 452 } | 453 } |
| 453 *dst_alpha_scan = src_alpha; | 454 *dst_alpha_scan = src_alpha; |
| 454 } | 455 } |
| 455 dest_scan++; | 456 dest_scan++; |
| 456 dst_alpha_scan++; | 457 dst_alpha_scan++; |
| 457 src_scan += 4; | 458 src_scan += 4; |
| 458 continue; | 459 continue; |
| 459 } | 460 } |
| 460 uint8_t src_alpha = src_scan[3]; | 461 uint8_t src_alpha = src_scan[3]; |
| 461 if (clip_scan) { | 462 if (clip_scan) |
| 462 src_alpha = clip_scan[col] * src_alpha / 255; | 463 src_alpha = clip_scan[col] * src_alpha / 255; |
| 463 } | 464 |
| 464 if (src_alpha == 0) { | 465 if (src_alpha == 0) { |
| 465 dest_scan++; | 466 dest_scan++; |
| 466 dst_alpha_scan++; | 467 dst_alpha_scan++; |
| 467 src_scan += 4; | 468 src_scan += 4; |
| 468 continue; | 469 continue; |
| 469 } | 470 } |
| 470 *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha); | 471 *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha); |
| 471 int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan); | 472 int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan); |
| 472 uint8_t gray; | 473 uint8_t gray; |
| 473 if (pIccTransform) { | 474 if (pIccTransform) |
| 474 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); | 475 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); |
| 475 } else { | 476 else |
| 476 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); | 477 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); |
| 477 } | 478 |
| 478 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); | 479 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); |
| 479 dest_scan++; | 480 dest_scan++; |
| 480 dst_alpha_scan++; | 481 dst_alpha_scan++; |
| 481 src_scan += 4; | 482 src_scan += 4; |
| 482 } | 483 } |
| 484 } |
| 483 } | 485 } |
| 486 |
| 484 inline void _CompositeRow_Argb2Gray(uint8_t* dest_scan, | 487 inline void _CompositeRow_Argb2Gray(uint8_t* dest_scan, |
| 485 const uint8_t* src_scan, | 488 const uint8_t* src_scan, |
| 486 int pixel_count, | 489 int pixel_count, |
| 487 int blend_type, | 490 int blend_type, |
| 488 const uint8_t* clip_scan, | 491 const uint8_t* clip_scan, |
| 489 const uint8_t* src_alpha_scan, | 492 const uint8_t* src_alpha_scan, |
| 490 void* pIccTransform) { | 493 void* pIccTransform) { |
| 491 ICodec_IccModule* pIccModule = NULL; | 494 ICodec_IccModule* pIccModule = NULL; |
| 492 uint8_t gray; | 495 uint8_t gray; |
| 493 if (pIccTransform) { | 496 if (pIccTransform) |
| 494 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); | 497 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); |
| 495 } | 498 |
| 496 if (blend_type) { | 499 if (blend_type) { |
| 497 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 500 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 498 int blended_color; | 501 int blended_color; |
| 499 if (src_alpha_scan) { | 502 if (src_alpha_scan) { |
| 500 for (int col = 0; col < pixel_count; col++) { | 503 for (int col = 0; col < pixel_count; col++) { |
| 501 int src_alpha = *src_alpha_scan++; | 504 int src_alpha = *src_alpha_scan++; |
| 502 if (clip_scan) { | 505 if (clip_scan) |
| 503 src_alpha = clip_scan[col] * src_alpha / 255; | 506 src_alpha = clip_scan[col] * src_alpha / 255; |
| 504 } | 507 |
| 505 if (src_alpha) { | 508 if (src_alpha) { |
| 506 if (pIccTransform) { | 509 if (pIccTransform) |
| 507 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); | 510 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); |
| 508 } else { | 511 else |
| 509 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); | 512 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); |
| 510 } | 513 |
| 511 if (bNonseparableBlend) { | 514 if (bNonseparableBlend) { |
| 512 blended_color = | 515 blended_color = |
| 513 blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan; | 516 blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan; |
| 514 } | 517 } |
| 515 gray = bNonseparableBlend ? blended_color | 518 gray = bNonseparableBlend ? blended_color |
| 516 : _BLEND(blend_type, *dest_scan, gray); | 519 : _BLEND(blend_type, *dest_scan, gray); |
| 517 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha); | 520 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha); |
| 518 } | 521 } |
| 519 dest_scan++; | 522 dest_scan++; |
| 520 src_scan += 3; | 523 src_scan += 3; |
| 521 } | 524 } |
| 522 } else | 525 } else { |
| 523 for (int col = 0; col < pixel_count; col++) { | 526 for (int col = 0; col < pixel_count; col++) { |
| 524 int src_alpha = src_scan[3]; | 527 int src_alpha = src_scan[3]; |
| 525 if (clip_scan) { | 528 if (clip_scan) |
| 526 src_alpha = clip_scan[col] * src_alpha / 255; | 529 src_alpha = clip_scan[col] * src_alpha / 255; |
| 527 } | 530 |
| 528 if (src_alpha) { | 531 if (src_alpha) { |
| 529 if (pIccTransform) { | 532 if (pIccTransform) |
| 530 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); | 533 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); |
| 531 } else { | 534 else |
| 532 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); | 535 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); |
| 533 } | 536 |
| 534 if (bNonseparableBlend) { | 537 if (bNonseparableBlend) { |
| 535 blended_color = | 538 blended_color = |
| 536 blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan; | 539 blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan; |
| 537 } | 540 } |
| 538 gray = bNonseparableBlend ? blended_color | 541 gray = bNonseparableBlend ? blended_color |
| 539 : _BLEND(blend_type, *dest_scan, gray); | 542 : _BLEND(blend_type, *dest_scan, gray); |
| 540 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha); | 543 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha); |
| 541 } | 544 } |
| 542 dest_scan++; | 545 dest_scan++; |
| 543 src_scan += 4; | 546 src_scan += 4; |
| 544 } | 547 } |
| 548 } |
| 545 return; | 549 return; |
| 546 } | 550 } |
| 547 if (src_alpha_scan) { | 551 if (src_alpha_scan) { |
| 548 for (int col = 0; col < pixel_count; col++) { | 552 for (int col = 0; col < pixel_count; col++) { |
| 549 int src_alpha = *src_alpha_scan++; | 553 int src_alpha = *src_alpha_scan++; |
| 550 if (clip_scan) { | 554 if (clip_scan) |
| 551 src_alpha = clip_scan[col] * src_alpha / 255; | 555 src_alpha = clip_scan[col] * src_alpha / 255; |
| 552 } | 556 |
| 553 if (src_alpha) { | 557 if (src_alpha) { |
| 554 if (pIccTransform) { | 558 if (pIccTransform) |
| 555 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); | 559 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); |
| 556 } else { | 560 else |
| 557 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); | 561 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); |
| 558 } | 562 |
| 559 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha); | 563 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha); |
| 560 } | 564 } |
| 561 dest_scan++; | 565 dest_scan++; |
| 562 src_scan += 3; | 566 src_scan += 3; |
| 563 } | 567 } |
| 564 } else | 568 } else { |
| 565 for (int col = 0; col < pixel_count; col++) { | 569 for (int col = 0; col < pixel_count; col++) { |
| 566 int src_alpha = src_scan[3]; | 570 int src_alpha = src_scan[3]; |
| 567 if (clip_scan) { | 571 if (clip_scan) |
| 568 src_alpha = clip_scan[col] * src_alpha / 255; | 572 src_alpha = clip_scan[col] * src_alpha / 255; |
| 569 } | 573 |
| 570 if (src_alpha) { | 574 if (src_alpha) { |
| 571 if (pIccTransform) { | 575 if (pIccTransform) |
| 572 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); | 576 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); |
| 573 } else { | 577 else |
| 574 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); | 578 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); |
| 575 } | 579 |
| 576 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha); | 580 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha); |
| 577 } | 581 } |
| 578 dest_scan++; | 582 dest_scan++; |
| 579 src_scan += 4; | 583 src_scan += 4; |
| 580 } | 584 } |
| 585 } |
| 581 } | 586 } |
| 587 |
| 582 inline void _CompositeRow_Rgb2Gray(uint8_t* dest_scan, | 588 inline void _CompositeRow_Rgb2Gray(uint8_t* dest_scan, |
| 583 const uint8_t* src_scan, | 589 const uint8_t* src_scan, |
| 584 int src_Bpp, | 590 int src_Bpp, |
| 585 int pixel_count, | 591 int pixel_count, |
| 586 int blend_type, | 592 int blend_type, |
| 587 const uint8_t* clip_scan, | 593 const uint8_t* clip_scan, |
| 588 void* pIccTransform) { | 594 void* pIccTransform) { |
| 589 ICodec_IccModule* pIccModule = NULL; | 595 ICodec_IccModule* pIccModule = NULL; |
| 590 uint8_t gray; | 596 uint8_t gray; |
| 591 if (pIccTransform) { | 597 if (pIccTransform) { |
| (...skipping 1730 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2322 dest_scan[3] = dest_alpha; | 2328 dest_scan[3] = dest_alpha; |
| 2323 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2329 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2324 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); | 2330 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); |
| 2325 dest_scan++; | 2331 dest_scan++; |
| 2326 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); | 2332 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); |
| 2327 dest_scan++; | 2333 dest_scan++; |
| 2328 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); | 2334 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); |
| 2329 dest_scan++; | 2335 dest_scan++; |
| 2330 dest_scan++; | 2336 dest_scan++; |
| 2331 } | 2337 } |
| 2332 } else | 2338 } else { |
| 2333 for (int col = 0; col < width; col++) { | 2339 for (int col = 0; col < width; col++) { |
| 2334 FX_ARGB argb = pPalette[*src_scan]; | 2340 FX_ARGB argb = pPalette[*src_scan]; |
| 2335 int src_r = FXARGB_R(argb); | 2341 int src_r = FXARGB_R(argb); |
| 2336 int src_g = FXARGB_G(argb); | 2342 int src_g = FXARGB_G(argb); |
| 2337 int src_b = FXARGB_B(argb); | 2343 int src_b = FXARGB_B(argb); |
| 2338 if (!clip_scan || clip_scan[col] == 255) { | 2344 if (!clip_scan || clip_scan[col] == 255) { |
| 2339 *dest_scan++ = src_b; | 2345 *dest_scan++ = src_b; |
| 2340 *dest_scan++ = src_g; | 2346 *dest_scan++ = src_g; |
| 2341 *dest_scan++ = src_r; | 2347 *dest_scan++ = src_r; |
| 2342 *dest_scan++ = 255; | 2348 *dest_scan++ = 255; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2356 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2362 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2357 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); | 2363 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); |
| 2358 dest_scan++; | 2364 dest_scan++; |
| 2359 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); | 2365 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); |
| 2360 dest_scan++; | 2366 dest_scan++; |
| 2361 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); | 2367 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); |
| 2362 dest_scan++; | 2368 dest_scan++; |
| 2363 dest_scan++; | 2369 dest_scan++; |
| 2364 src_scan++; | 2370 src_scan++; |
| 2365 } | 2371 } |
| 2372 } |
| 2366 } | 2373 } |
| 2374 |
| 2367 void _CompositeRow_8bppRgb2Rgba_NoBlend(uint8_t* dest_scan, | 2375 void _CompositeRow_8bppRgb2Rgba_NoBlend(uint8_t* dest_scan, |
| 2368 const uint8_t* src_scan, | 2376 const uint8_t* src_scan, |
| 2369 int width, | 2377 int width, |
| 2370 FX_DWORD* pPalette, | 2378 FX_DWORD* pPalette, |
| 2371 const uint8_t* clip_scan, | 2379 const uint8_t* clip_scan, |
| 2372 uint8_t* dest_alpha_scan, | 2380 uint8_t* dest_alpha_scan, |
| 2373 const uint8_t* src_alpha_scan) { | 2381 const uint8_t* src_alpha_scan) { |
| 2374 if (src_alpha_scan) { | 2382 if (src_alpha_scan) { |
| 2375 for (int col = 0; col < width; col++) { | 2383 for (int col = 0; col < width; col++) { |
| 2376 FX_ARGB argb = pPalette[*src_scan]; | 2384 FX_ARGB argb = pPalette[*src_scan]; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 2407 back_alpha + src_alpha - back_alpha * src_alpha / 255; | 2415 back_alpha + src_alpha - back_alpha * src_alpha / 255; |
| 2408 *dest_alpha_scan++ = dest_alpha; | 2416 *dest_alpha_scan++ = dest_alpha; |
| 2409 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2417 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2410 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); | 2418 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); |
| 2411 dest_scan++; | 2419 dest_scan++; |
| 2412 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); | 2420 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); |
| 2413 dest_scan++; | 2421 dest_scan++; |
| 2414 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); | 2422 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); |
| 2415 dest_scan++; | 2423 dest_scan++; |
| 2416 } | 2424 } |
| 2417 } else | 2425 } else { |
| 2418 for (int col = 0; col < width; col++) { | 2426 for (int col = 0; col < width; col++) { |
| 2419 FX_ARGB argb = pPalette[*src_scan]; | 2427 FX_ARGB argb = pPalette[*src_scan]; |
| 2420 int src_r = FXARGB_R(argb); | 2428 int src_r = FXARGB_R(argb); |
| 2421 int src_g = FXARGB_G(argb); | 2429 int src_g = FXARGB_G(argb); |
| 2422 int src_b = FXARGB_B(argb); | 2430 int src_b = FXARGB_B(argb); |
| 2423 if (!clip_scan || clip_scan[col] == 255) { | 2431 if (!clip_scan || clip_scan[col] == 255) { |
| 2424 *dest_scan++ = src_b; | 2432 *dest_scan++ = src_b; |
| 2425 *dest_scan++ = src_g; | 2433 *dest_scan++ = src_g; |
| 2426 *dest_scan++ = src_r; | 2434 *dest_scan++ = src_r; |
| 2427 *dest_alpha_scan++ = 255; | 2435 *dest_alpha_scan++ = 255; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2441 *dest_alpha_scan++ = dest_alpha; | 2449 *dest_alpha_scan++ = dest_alpha; |
| 2442 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2450 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2443 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); | 2451 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); |
| 2444 dest_scan++; | 2452 dest_scan++; |
| 2445 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); | 2453 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); |
| 2446 dest_scan++; | 2454 dest_scan++; |
| 2447 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); | 2455 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); |
| 2448 dest_scan++; | 2456 dest_scan++; |
| 2449 src_scan++; | 2457 src_scan++; |
| 2450 } | 2458 } |
| 2459 } |
| 2451 } | 2460 } |
| 2461 |
| 2452 inline void _CompositeRow_1bppRgb2Argb_NoBlend(uint8_t* dest_scan, | 2462 inline void _CompositeRow_1bppRgb2Argb_NoBlend(uint8_t* dest_scan, |
| 2453 const uint8_t* src_scan, | 2463 const uint8_t* src_scan, |
| 2454 int src_left, | 2464 int src_left, |
| 2455 int width, | 2465 int width, |
| 2456 FX_DWORD* pPalette, | 2466 FX_DWORD* pPalette, |
| 2457 const uint8_t* clip_scan) { | 2467 const uint8_t* clip_scan) { |
| 2458 int reset_r, reset_g, reset_b; | 2468 int reset_r, reset_g, reset_b; |
| 2459 int set_r, set_g, set_b; | 2469 int set_r, set_g, set_b; |
| 2460 reset_r = FXARGB_R(pPalette[0]); | 2470 reset_r = FXARGB_R(pPalette[0]); |
| 2461 reset_g = FXARGB_G(pPalette[0]); | 2471 reset_g = FXARGB_G(pPalette[0]); |
| (...skipping 1651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4113 pDestPalette = (FX_DWORD*)gray_pal; | 4123 pDestPalette = (FX_DWORD*)gray_pal; |
| 4114 if (isSrcCmyk) { | 4124 if (isSrcCmyk) { |
| 4115 for (int i = 0; i < pal_count; i++) { | 4125 for (int i = 0; i < pal_count; i++) { |
| 4116 FX_CMYK cmyk = pSrcPalette[i]; | 4126 FX_CMYK cmyk = pSrcPalette[i]; |
| 4117 uint8_t r, g, b; | 4127 uint8_t r, g, b; |
| 4118 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValue(cmyk), | 4128 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValue(cmyk), |
| 4119 FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk), r, | 4129 FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk), r, |
| 4120 g, b); | 4130 g, b); |
| 4121 *gray_pal++ = FXRGB2GRAY(r, g, b); | 4131 *gray_pal++ = FXRGB2GRAY(r, g, b); |
| 4122 } | 4132 } |
| 4123 } else | 4133 } else { |
| 4124 for (int i = 0; i < pal_count; i++) { | 4134 for (int i = 0; i < pal_count; i++) { |
| 4125 FX_ARGB argb = pSrcPalette[i]; | 4135 FX_ARGB argb = pSrcPalette[i]; |
| 4126 *gray_pal++ = | 4136 *gray_pal++ = |
| 4127 FXRGB2GRAY(FXARGB_R(argb), FXARGB_G(argb), FXARGB_B(argb)); | 4137 FXRGB2GRAY(FXARGB_R(argb), FXARGB_G(argb), FXARGB_B(argb)); |
| 4128 } | 4138 } |
| 4139 } |
| 4129 } else { | 4140 } else { |
| 4130 int palsize = 1 << (src_format & 0xff); | 4141 int palsize = 1 << (src_format & 0xff); |
| 4131 pDestPalette = FX_Alloc(FX_DWORD, palsize); | 4142 pDestPalette = FX_Alloc(FX_DWORD, palsize); |
| 4132 if (isDstCmyk == isSrcCmyk) { | 4143 if (isDstCmyk == isSrcCmyk) { |
| 4133 FXSYS_memcpy(pDestPalette, pSrcPalette, palsize * sizeof(FX_DWORD)); | 4144 FXSYS_memcpy(pDestPalette, pSrcPalette, palsize * sizeof(FX_DWORD)); |
| 4134 } else { | 4145 } else { |
| 4135 for (int i = 0; i < palsize; i++) { | 4146 for (int i = 0; i < palsize; i++) { |
| 4136 FX_CMYK cmyk = pSrcPalette[i]; | 4147 FX_CMYK cmyk = pSrcPalette[i]; |
| 4137 uint8_t r, g, b; | 4148 uint8_t r, g, b; |
| 4138 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValue(cmyk), | 4149 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValue(cmyk), |
| (...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4579 clip_scan); | 4590 clip_scan); |
| 4580 } else if ((m_DestFormat & 0xff) == 8) { | 4591 } else if ((m_DestFormat & 0xff) == 8) { |
| 4581 if (m_DestFormat & 0x0200) { | 4592 if (m_DestFormat & 0x0200) { |
| 4582 _CompositeRow_ByteMask2Graya(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, | 4593 _CompositeRow_ByteMask2Graya(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, |
| 4583 width, clip_scan, dst_extra_alpha); | 4594 width, clip_scan, dst_extra_alpha); |
| 4584 } else { | 4595 } else { |
| 4585 _CompositeRow_ByteMask2Gray(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, | 4596 _CompositeRow_ByteMask2Gray(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, |
| 4586 width, clip_scan); | 4597 width, clip_scan); |
| 4587 } | 4598 } |
| 4588 } else if (m_bRgbByteOrder) { | 4599 } else if (m_bRgbByteOrder) { |
| 4589 if (m_DestFormat == FXDIB_Argb) | 4600 if (m_DestFormat == FXDIB_Argb) { |
| 4590 _CompositeRow_ByteMask2Argb_RgbByteOrder( | 4601 _CompositeRow_ByteMask2Argb_RgbByteOrder( |
| 4591 dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue, | 4602 dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue, |
| 4592 width, m_BlendType, clip_scan); | 4603 width, m_BlendType, clip_scan); |
| 4593 else | 4604 } else { |
| 4594 _CompositeRow_ByteMask2Rgb_RgbByteOrder( | 4605 _CompositeRow_ByteMask2Rgb_RgbByteOrder( |
| 4595 dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue, | 4606 dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue, |
| 4596 width, m_BlendType, (m_DestFormat & 0xff) >> 3, clip_scan); | 4607 width, m_BlendType, (m_DestFormat & 0xff) >> 3, clip_scan); |
| 4608 } |
| 4597 return; | 4609 return; |
| 4598 } else if (m_DestFormat == FXDIB_Argb) | 4610 } else if (m_DestFormat == FXDIB_Argb) { |
| 4599 _CompositeRow_ByteMask2Argb(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, | 4611 _CompositeRow_ByteMask2Argb(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, |
| 4600 m_MaskGreen, m_MaskBlue, width, m_BlendType, | 4612 m_MaskGreen, m_MaskBlue, width, m_BlendType, |
| 4601 clip_scan); | 4613 clip_scan); |
| 4602 else if (m_DestFormat == FXDIB_Rgb || m_DestFormat == FXDIB_Rgb32) | 4614 } else if (m_DestFormat == FXDIB_Rgb || m_DestFormat == FXDIB_Rgb32) { |
| 4603 _CompositeRow_ByteMask2Rgb(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, | 4615 _CompositeRow_ByteMask2Rgb(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, |
| 4604 m_MaskGreen, m_MaskBlue, width, m_BlendType, | 4616 m_MaskGreen, m_MaskBlue, width, m_BlendType, |
| 4605 (m_DestFormat & 0xff) >> 3, clip_scan); | 4617 (m_DestFormat & 0xff) >> 3, clip_scan); |
| 4606 else if (m_DestFormat == FXDIB_Rgba) | 4618 } else if (m_DestFormat == FXDIB_Rgba) { |
| 4607 _CompositeRow_ByteMask2Rgba(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, | 4619 _CompositeRow_ByteMask2Rgba(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, |
| 4608 m_MaskGreen, m_MaskBlue, width, m_BlendType, | 4620 m_MaskGreen, m_MaskBlue, width, m_BlendType, |
| 4609 clip_scan, dst_extra_alpha); | 4621 clip_scan, dst_extra_alpha); |
| 4622 } |
| 4610 } | 4623 } |
| 4611 void CFX_ScanlineCompositor::CompositeBitMaskLine(uint8_t* dest_scan, | 4624 void CFX_ScanlineCompositor::CompositeBitMaskLine(uint8_t* dest_scan, |
| 4612 const uint8_t* src_scan, | 4625 const uint8_t* src_scan, |
| 4613 int src_left, | 4626 int src_left, |
| 4614 int width, | 4627 int width, |
| 4615 const uint8_t* clip_scan, | 4628 const uint8_t* clip_scan, |
| 4616 uint8_t* dst_extra_alpha) { | 4629 uint8_t* dst_extra_alpha) { |
| 4617 if (m_DestFormat == FXDIB_8bppMask) { | 4630 if (m_DestFormat == FXDIB_8bppMask) { |
| 4618 _CompositeRow_BitMask2Mask(dest_scan, src_scan, m_MaskAlpha, src_left, | 4631 _CompositeRow_BitMask2Mask(dest_scan, src_scan, m_MaskAlpha, src_left, |
| 4619 width, clip_scan); | 4632 width, clip_scan); |
| 4620 } else if ((m_DestFormat & 0xff) == 8) { | 4633 } else if ((m_DestFormat & 0xff) == 8) { |
| 4621 if (m_DestFormat & 0x0200) | 4634 if (m_DestFormat & 0x0200) { |
| 4622 _CompositeRow_BitMask2Graya(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, | 4635 _CompositeRow_BitMask2Graya(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, |
| 4623 src_left, width, clip_scan, dst_extra_alpha); | 4636 src_left, width, clip_scan, dst_extra_alpha); |
| 4624 else { | 4637 } else { |
| 4625 _CompositeRow_BitMask2Gray(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, | 4638 _CompositeRow_BitMask2Gray(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, |
| 4626 src_left, width, clip_scan); | 4639 src_left, width, clip_scan); |
| 4627 } | 4640 } |
| 4628 } else if (m_bRgbByteOrder) { | 4641 } else if (m_bRgbByteOrder) { |
| 4629 if (m_DestFormat == FXDIB_Argb) | 4642 if (m_DestFormat == FXDIB_Argb) { |
| 4630 _CompositeRow_BitMask2Argb_RgbByteOrder( | 4643 _CompositeRow_BitMask2Argb_RgbByteOrder( |
| 4631 dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue, | 4644 dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue, |
| 4632 src_left, width, m_BlendType, clip_scan); | 4645 src_left, width, m_BlendType, clip_scan); |
| 4633 else | 4646 } else { |
| 4634 _CompositeRow_BitMask2Rgb_RgbByteOrder( | 4647 _CompositeRow_BitMask2Rgb_RgbByteOrder( |
| 4635 dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue, | 4648 dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue, |
| 4636 src_left, width, m_BlendType, (m_DestFormat & 0xff) >> 3, clip_scan); | 4649 src_left, width, m_BlendType, (m_DestFormat & 0xff) >> 3, clip_scan); |
| 4650 } |
| 4637 return; | 4651 return; |
| 4638 } else if (m_DestFormat == FXDIB_Argb) | 4652 } else if (m_DestFormat == FXDIB_Argb) { |
| 4639 _CompositeRow_BitMask2Argb(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, | 4653 _CompositeRow_BitMask2Argb(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, |
| 4640 m_MaskGreen, m_MaskBlue, src_left, width, | 4654 m_MaskGreen, m_MaskBlue, src_left, width, |
| 4641 m_BlendType, clip_scan); | 4655 m_BlendType, clip_scan); |
| 4642 else if (m_DestFormat == FXDIB_Rgb || m_DestFormat == FXDIB_Rgb32) | 4656 } else if (m_DestFormat == FXDIB_Rgb || m_DestFormat == FXDIB_Rgb32) { |
| 4643 _CompositeRow_BitMask2Rgb( | 4657 _CompositeRow_BitMask2Rgb( |
| 4644 dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue, | 4658 dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue, |
| 4645 src_left, width, m_BlendType, (m_DestFormat & 0xff) >> 3, clip_scan); | 4659 src_left, width, m_BlendType, (m_DestFormat & 0xff) >> 3, clip_scan); |
| 4660 } |
| 4646 } | 4661 } |
| 4662 |
| 4647 FX_BOOL CFX_DIBitmap::CompositeBitmap(int dest_left, | 4663 FX_BOOL CFX_DIBitmap::CompositeBitmap(int dest_left, |
| 4648 int dest_top, | 4664 int dest_top, |
| 4649 int width, | 4665 int width, |
| 4650 int height, | 4666 int height, |
| 4651 const CFX_DIBSource* pSrcBitmap, | 4667 const CFX_DIBSource* pSrcBitmap, |
| 4652 int src_left, | 4668 int src_left, |
| 4653 int src_top, | 4669 int src_top, |
| 4654 int blend_type, | 4670 int blend_type, |
| 4655 const CFX_ClipRgn* pClipRgn, | 4671 const CFX_ClipRgn* pClipRgn, |
| 4656 FX_BOOL bRgbByteOrder, | 4672 FX_BOOL bRgbByteOrder, |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4831 } | 4847 } |
| 4832 } | 4848 } |
| 4833 if (IsCmykImage()) { | 4849 if (IsCmykImage()) { |
| 4834 gray = ~gray; | 4850 gray = ~gray; |
| 4835 } | 4851 } |
| 4836 } | 4852 } |
| 4837 for (int row = rect.top; row < rect.bottom; row++) { | 4853 for (int row = rect.top; row < rect.bottom; row++) { |
| 4838 uint8_t* dest_scan = m_pBuffer + row * m_Pitch + rect.left; | 4854 uint8_t* dest_scan = m_pBuffer + row * m_Pitch + rect.left; |
| 4839 if (src_alpha == 255) { | 4855 if (src_alpha == 255) { |
| 4840 FXSYS_memset(dest_scan, gray, width); | 4856 FXSYS_memset(dest_scan, gray, width); |
| 4841 } else | 4857 } else { |
| 4842 for (int col = 0; col < width; col++) { | 4858 for (int col = 0; col < width; col++) { |
| 4843 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha); | 4859 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha); |
| 4844 dest_scan++; | 4860 dest_scan++; |
| 4845 } | 4861 } |
| 4862 } |
| 4846 } | 4863 } |
| 4847 return TRUE; | 4864 return TRUE; |
| 4848 } | 4865 } |
| 4849 if (m_bpp == 1) { | 4866 if (m_bpp == 1) { |
| 4850 ASSERT(!IsCmykImage() && (uint8_t)(alpha_flag >> 8) == 0); | 4867 ASSERT(!IsCmykImage() && (uint8_t)(alpha_flag >> 8) == 0); |
| 4851 int left_shift = rect.left % 8; | 4868 int left_shift = rect.left % 8; |
| 4852 int right_shift = rect.right % 8; | 4869 int right_shift = rect.right % 8; |
| 4853 int width = rect.right / 8 - rect.left / 8; | 4870 int width = rect.right / 8 - rect.left / 8; |
| 4854 int index = 0; | 4871 int index = 0; |
| 4855 if (m_pPalette) { | 4872 if (m_pPalette) { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4887 } | 4904 } |
| 4888 ASSERT(m_bpp >= 24); | 4905 ASSERT(m_bpp >= 24); |
| 4889 if (m_bpp < 24) { | 4906 if (m_bpp < 24) { |
| 4890 return FALSE; | 4907 return FALSE; |
| 4891 } | 4908 } |
| 4892 if (pIccTransform && CFX_GEModule::Get()->GetCodecModule()) { | 4909 if (pIccTransform && CFX_GEModule::Get()->GetCodecModule()) { |
| 4893 ICodec_IccModule* pIccModule = | 4910 ICodec_IccModule* pIccModule = |
| 4894 CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); | 4911 CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); |
| 4895 pIccModule->TranslateScanline(pIccTransform, color_p, color_p, 1); | 4912 pIccModule->TranslateScanline(pIccTransform, color_p, color_p, 1); |
| 4896 } else { | 4913 } else { |
| 4897 if (alpha_flag >> 8 && !IsCmykImage()) | 4914 if (alpha_flag >> 8 && !IsCmykImage()) { |
| 4898 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color), | 4915 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color), |
| 4899 FXSYS_GetYValue(color), FXSYS_GetKValue(color), | 4916 FXSYS_GetYValue(color), FXSYS_GetKValue(color), |
| 4900 color_p[2], color_p[1], color_p[0]); | 4917 color_p[2], color_p[1], color_p[0]); |
| 4901 else if (!(alpha_flag >> 8) && IsCmykImage()) { | 4918 } else if (!(alpha_flag >> 8) && IsCmykImage()) { |
| 4902 return FALSE; | 4919 return FALSE; |
| 4903 } | 4920 } |
| 4904 } | 4921 } |
| 4905 if (!IsCmykImage()) { | 4922 if (!IsCmykImage()) { |
| 4906 color_p[3] = (uint8_t)src_alpha; | 4923 color_p[3] = (uint8_t)src_alpha; |
| 4907 } | 4924 } |
| 4908 int Bpp = m_bpp / 8; | 4925 int Bpp = m_bpp / 8; |
| 4909 FX_BOOL bAlpha = HasAlpha(); | 4926 FX_BOOL bAlpha = HasAlpha(); |
| 4910 bool bArgb = GetFormat() == FXDIB_Argb; | 4927 bool bArgb = GetFormat() == FXDIB_Argb; |
| 4911 if (src_alpha == 255) { | 4928 if (src_alpha == 255) { |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5184 } | 5201 } |
| 5185 src_alpha_scan = m_pScanlineAlphaV; | 5202 src_alpha_scan = m_pScanlineAlphaV; |
| 5186 dest_alpha_scan = dest_alpha_buf; | 5203 dest_alpha_scan = dest_alpha_buf; |
| 5187 if (dest_alpha_scan) { | 5204 if (dest_alpha_scan) { |
| 5188 for (i = 0; i < m_DestHeight; i++) { | 5205 for (i = 0; i < m_DestHeight; i++) { |
| 5189 *dest_alpha_scan = *src_alpha_scan++; | 5206 *dest_alpha_scan = *src_alpha_scan++; |
| 5190 dest_alpha_scan += y_alpha_step; | 5207 dest_alpha_scan += y_alpha_step; |
| 5191 } | 5208 } |
| 5192 } | 5209 } |
| 5193 } | 5210 } |
| OLD | NEW |