// 242.cutout -- does a rectangular mask really quickly. // by r. luke dubois (luke@music.columbia.edu), // computer music center, columbia university, 2001. // // Pd / Framestein port by Olaf Matthes , June 2002 // // objects and source are provided without warranty of any kind, express or implied. // // usage: cutout // #include #include #include "plugin.h" void perform_effect(struct frame f, struct args a) { printf("Using cutout as effect does nothing!\n"); } void perform_copy(struct frame f1, struct frame f2, struct args a) { short x, y, w, h, x_c, y_c, w_c, h_c, x_m, y_m, check, flip = 0; byte pixelsize = f1.pixelformat/8; pixel16 *pix1_16, *pix2_16; pixel24 *pix1_24, *pix2_24; pixel32 *pix1_32, *pix2_32; char *t; w = f1.width= x_c) && (x <= x_m) && (y >= y_c) && (y <= y_m)) { check = 0; } else { check = 1; } // occlude or don't occlude // sort out which image input goes over and which goes under if(flip)check = !check; if(!check) { pix2_16[x] = pix1_16[x]; // set output1 } } } break; case 24: for(y = 0; y < h; y++) { pix1_24 = scanline24(f1, y); pix2_24 = scanline24(f2, y); for(x = 0; x < w; x++) { if((x >= x_c) && (x <= x_m) && (y >= y_c) && (y <= y_m)) { check = 0; } else { check = 1; } // occlude or don't occlude // sort out which image input goes over and which goes under if(flip)check = !check; if(!check) { pix2_24[x] = pix1_24[x]; // set output1 } } } break; case 32: for(y = 0; y < h; y++) { pix1_32 = scanline32(f1, y); pix2_32 = scanline32(f2, y); for(x = 0; x < w; x++) { if((x >= x_c) && (x <= x_m) && (y >= y_c) && (y <= y_m)) { check = 0; } else { check = 1; } // occlude or don't occlude // sort out which image input goes over and which goes under if(flip)check = !check; if(!check) { pix2_32[x] = pix1_32[x]; // set output1 } } } break; } }