Changeset 3417
- Timestamp:
- 04/21/09 01:56:56 (4 years ago)
- File:
-
- 1 edited
-
libpipi/trunk/pipi/context.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libpipi/trunk/pipi/context.c
r3416 r3417 244 244 ctx->images[ctx->nimages - 1] = dst; 245 245 } 246 else if(!strcmp(cmd, "boxblur") )247 { 248 pipi_image_t *src, *dst ;246 else if(!strcmp(cmd, "boxblur") || !strcmp(cmd, "median")) 247 { 248 pipi_image_t *src, *dst = NULL; 249 249 char const *arg; 250 250 va_list ap; … … 261 261 h = atof(arg + 1); 262 262 src = ctx->images[ctx->nimages - 1]; 263 dst = pipi_box_blur_ext(src, w, h); 263 switch(cmd[0]) 264 { 265 case 'b': dst = pipi_box_blur_ext(src, w, h); break; 266 case 'm': dst = pipi_median_ext(src, w, h); break; 267 } 264 268 if(dst == NULL) 265 269 return -1; … … 267 271 ctx->images[ctx->nimages - 1] = dst; 268 272 } 269 else if(!strcmp(cmd, "median")) 270 { 271 pipi_image_t *src, *dst; 272 char const *arg; 273 va_list ap; 274 double w, h; 275 276 if(ctx->nimages < 1) 277 return -1; 278 va_start(ap, cmd); 279 arg = va_arg(ap, char const *); 280 va_end(ap); 281 w = h = atof(arg); 282 arg = strchr(arg, 'x'); 283 if(arg) 284 h = atof(arg + 1); 285 src = ctx->images[ctx->nimages - 1]; 286 dst = pipi_median_ext(src, w, h); 287 if(dst == NULL) 288 return -1; 289 pipi_free(src); 290 ctx->images[ctx->nimages - 1] = dst; 291 } 292 else if(!strcmp(cmd, "geometry")) 293 { 294 pipi_image_t *src, *dst; 273 else if(!strcmp(cmd, "geometry") || !strcmp(cmd, "tile")) 274 { 275 pipi_image_t *src, *dst = NULL; 295 276 char const *arg; 296 277 va_list ap; … … 310 291 return -1; 311 292 src = ctx->images[ctx->nimages - 1]; 312 dst = pipi_resize(src, w, h); 313 if(dst == NULL) 314 return -1; 315 pipi_free(src); 316 ctx->images[ctx->nimages - 1] = dst; 317 } 318 else if(!strcmp(cmd, "tile")) 319 { 320 pipi_image_t *src, *dst; 321 char const *arg; 322 va_list ap; 323 int w, h; 324 325 if(ctx->nimages < 1) 326 return -1; 327 va_start(ap, cmd); 328 arg = va_arg(ap, char const *); 329 va_end(ap); 330 w = atoi(arg); 331 arg = strchr(arg, 'x'); 332 if(!arg) 333 return -1; 334 h = atoi(arg + 1); 335 if(w <= 0 || h <= 0) 336 return -1; 337 src = ctx->images[ctx->nimages - 1]; 338 dst = pipi_tile(src, w, h); 293 switch(cmd[0]) 294 { 295 case 'g': dst = pipi_resize(src, w, h); break; 296 case 't': dst = pipi_tile(src, w, h); break; 297 } 339 298 if(dst == NULL) 340 299 return -1; … … 390 349 pipi_free(tmp); 391 350 } 392 else if(!strcmp(cmd, "brightness")) 393 { 394 pipi_image_t *src, *dst; 351 else if(!strcmp(cmd, "brightness") || !strcmp(cmd, "contrast") 352 || !strcmp(cmd, "threshold")) 353 { 354 pipi_image_t *src, *dst = NULL; 395 355 char const *arg; 396 356 va_list ap; … … 404 364 val = atof(arg); 405 365 src = ctx->images[ctx->nimages - 1]; 406 dst = pipi_brightness(src, val); 407 if(dst == NULL) 408 return -1; 409 pipi_free(src); 410 ctx->images[ctx->nimages - 1] = dst; 411 } 412 else if(!strcmp(cmd, "contrast")) 413 { 414 pipi_image_t *src, *dst; 415 char const *arg; 416 va_list ap; 417 double val; 418 419 if(ctx->nimages < 1) 420 return -1; 421 va_start(ap, cmd); 422 arg = va_arg(ap, char const *); 423 va_end(ap); 424 val = atof(arg); 425 src = ctx->images[ctx->nimages - 1]; 426 dst = pipi_contrast(src, val); 427 if(dst == NULL) 428 return -1; 429 pipi_free(src); 430 ctx->images[ctx->nimages - 1] = dst; 431 } 432 else if(!strcmp(cmd, "threshold")) 433 { 434 pipi_image_t *src, *dst; 435 char const *arg; 436 va_list ap; 437 double val; 438 439 if(ctx->nimages < 1) 440 return -1; 441 va_start(ap, cmd); 442 arg = va_arg(ap, char const *); 443 va_end(ap); 444 val = atof(arg); 445 src = ctx->images[ctx->nimages - 1]; 446 dst = pipi_threshold(src, val); 366 switch(cmd[0]) 367 { 368 case 'b': dst = pipi_brightness(src, val); break; 369 case 'c': dst = pipi_contrast(src, val); break; 370 case 't': dst = pipi_threshold(src, val); break; 371 } 447 372 if(dst == NULL) 448 373 return -1; … … 534 459 ctx->nimages -= 2; 535 460 } 536 else if(!strcmp(cmd, "me an"))461 else if(!strcmp(cmd, "merge")) 537 462 { 538 463 pipi_image_t *dst; 464 char const *arg; 465 va_list ap; 466 double val; 539 467 540 468 if(ctx->nimages < 2) 541 469 return -1; 542 dst = pipi_mean(ctx->images[ctx->nimages - 2], 543 ctx->images[ctx->nimages - 1]); 470 471 va_start(ap, cmd); 472 arg = va_arg(ap, char const *); 473 va_end(ap); 474 val = atof(arg); 475 476 dst = pipi_merge(ctx->images[ctx->nimages - 2], 477 ctx->images[ctx->nimages - 1], val); 544 478 if(dst == NULL) 545 479 return -1; … … 549 483 ctx->nimages--; 550 484 } 551 else if(!strcmp(cmd, "merge")) 552 { 553 pipi_image_t *dst; 554 char const *arg; 555 va_list ap; 556 double val; 485 else if(!strcmp(cmd, "mean") || !strcmp(cmd, "min") || !strcmp(cmd, "max") 486 || !strcmp(cmd, "add") || !strcmp(cmd, "sub") 487 || !strcmp(cmd, "difference") || !strcmp(cmd, "multiply") 488 || !strcmp(cmd, "divide") || !strcmp(cmd, "screen") 489 || !strcmp(cmd, "overlay")) 490 { 491 pipi_image_t *dst = NULL; 557 492 558 493 if(ctx->nimages < 2) 559 494 return -1; 560 561 va_start(ap, cmd); 562 arg = va_arg(ap, char const *); 563 va_end(ap); 564 val = atof(arg); 565 566 dst = pipi_merge(ctx->images[ctx->nimages - 2], 567 ctx->images[ctx->nimages - 1], val); 568 if(dst == NULL) 569 return -1; 570 pipi_free(ctx->images[ctx->nimages - 2]); 571 pipi_free(ctx->images[ctx->nimages - 1]); 572 ctx->images[ctx->nimages - 2] = dst; 573 ctx->nimages--; 574 } 575 else if(!strcmp(cmd, "min")) 576 { 577 pipi_image_t *dst; 578 579 if(ctx->nimages < 2) 580 return -1; 581 dst = pipi_min(ctx->images[ctx->nimages - 2], 582 ctx->images[ctx->nimages - 1]); 583 if(dst == NULL) 584 return -1; 585 pipi_free(ctx->images[ctx->nimages - 2]); 586 pipi_free(ctx->images[ctx->nimages - 1]); 587 ctx->images[ctx->nimages - 2] = dst; 588 ctx->nimages--; 589 } 590 else if(!strcmp(cmd, "max")) 591 { 592 pipi_image_t *dst; 593 594 if(ctx->nimages < 2) 595 return -1; 596 dst = pipi_max(ctx->images[ctx->nimages - 2], 597 ctx->images[ctx->nimages - 1]); 598 if(dst == NULL) 599 return -1; 600 pipi_free(ctx->images[ctx->nimages - 2]); 601 pipi_free(ctx->images[ctx->nimages - 1]); 602 ctx->images[ctx->nimages - 2] = dst; 603 ctx->nimages--; 604 } 605 else if(!strcmp(cmd, "add")) 606 { 607 pipi_image_t *dst; 608 609 if(ctx->nimages < 2) 610 return -1; 611 dst = pipi_add(ctx->images[ctx->nimages - 2], 612 ctx->images[ctx->nimages - 1]); 613 if(dst == NULL) 614 return -1; 615 pipi_free(ctx->images[ctx->nimages - 2]); 616 pipi_free(ctx->images[ctx->nimages - 1]); 617 ctx->images[ctx->nimages - 2] = dst; 618 ctx->nimages--; 619 } 620 else if(!strcmp(cmd, "sub")) 621 { 622 pipi_image_t *dst; 623 624 if(ctx->nimages < 2) 625 return -1; 626 dst = pipi_sub(ctx->images[ctx->nimages - 2], 627 ctx->images[ctx->nimages - 1]); 628 if(dst == NULL) 629 return -1; 630 pipi_free(ctx->images[ctx->nimages - 2]); 631 pipi_free(ctx->images[ctx->nimages - 1]); 632 ctx->images[ctx->nimages - 2] = dst; 633 ctx->nimages--; 634 } 635 else if(!strcmp(cmd, "difference")) 636 { 637 pipi_image_t *dst; 638 639 if(ctx->nimages < 2) 640 return -1; 641 dst = pipi_difference(ctx->images[ctx->nimages - 2], 642 ctx->images[ctx->nimages - 1]); 643 if(dst == NULL) 644 return -1; 645 pipi_free(ctx->images[ctx->nimages - 2]); 646 pipi_free(ctx->images[ctx->nimages - 1]); 647 ctx->images[ctx->nimages - 2] = dst; 648 ctx->nimages--; 649 } 650 else if(!strcmp(cmd, "multiply")) 651 { 652 pipi_image_t *dst; 653 654 if(ctx->nimages < 2) 655 return -1; 656 dst = pipi_multiply(ctx->images[ctx->nimages - 2], 657 ctx->images[ctx->nimages - 1]); 658 if(dst == NULL) 659 return -1; 660 pipi_free(ctx->images[ctx->nimages - 2]); 661 pipi_free(ctx->images[ctx->nimages - 1]); 662 ctx->images[ctx->nimages - 2] = dst; 663 ctx->nimages--; 664 } 665 else if(!strcmp(cmd, "divide")) 666 { 667 pipi_image_t *dst; 668 669 if(ctx->nimages < 2) 670 return -1; 671 dst = pipi_divide(ctx->images[ctx->nimages - 2], 672 ctx->images[ctx->nimages - 1]); 673 if(dst == NULL) 674 return -1; 675 pipi_free(ctx->images[ctx->nimages - 2]); 676 pipi_free(ctx->images[ctx->nimages - 1]); 677 ctx->images[ctx->nimages - 2] = dst; 678 ctx->nimages--; 679 } 680 else if(!strcmp(cmd, "screen")) 681 { 682 pipi_image_t *dst; 683 684 if(ctx->nimages < 2) 685 return -1; 686 dst = pipi_screen(ctx->images[ctx->nimages - 2], 687 ctx->images[ctx->nimages - 1]); 688 if(dst == NULL) 689 return -1; 690 pipi_free(ctx->images[ctx->nimages - 2]); 691 pipi_free(ctx->images[ctx->nimages - 1]); 692 ctx->images[ctx->nimages - 2] = dst; 693 ctx->nimages--; 694 } 695 else if(!strcmp(cmd, "overlay")) 696 { 697 pipi_image_t *dst; 698 699 if(ctx->nimages < 2) 700 return -1; 701 dst = pipi_overlay(ctx->images[ctx->nimages - 2], 702 ctx->images[ctx->nimages - 1]); 495 switch(cmd[2]) 496 { 497 case 'a': dst = pipi_mean(ctx->images[ctx->nimages - 2], 498 ctx->images[ctx->nimages - 1]); 499 break; 500 case 'n': dst = pipi_min(ctx->images[ctx->nimages - 2], 501 ctx->images[ctx->nimages - 1]); 502 break; 503 case 'x': dst = pipi_max(ctx->images[ctx->nimages - 2], 504 ctx->images[ctx->nimages - 1]); 505 break; 506 case 'd': dst = pipi_add(ctx->images[ctx->nimages - 2], 507 ctx->images[ctx->nimages - 1]); 508 break; 509 case 'b': dst = pipi_sub(ctx->images[ctx->nimages - 2], 510 ctx->images[ctx->nimages - 1]); 511 break; 512 case 'f': dst = pipi_difference(ctx->images[ctx->nimages - 2], 513 ctx->images[ctx->nimages - 1]); 514 break; 515 case 'l': dst = pipi_multiply(ctx->images[ctx->nimages - 2], 516 ctx->images[ctx->nimages - 1]); 517 break; 518 case 'v': dst = pipi_divide(ctx->images[ctx->nimages - 2], 519 ctx->images[ctx->nimages - 1]); 520 break; 521 case 'r': dst = pipi_screen(ctx->images[ctx->nimages - 2], 522 ctx->images[ctx->nimages - 1]); 523 break; 524 case 'e': dst = pipi_overlay(ctx->images[ctx->nimages - 2], 525 ctx->images[ctx->nimages - 1]); 526 break; 527 } 703 528 if(dst == NULL) 704 529 return -1;
Note: See TracChangeset
for help on using the changeset viewer.
