//Réaltisé par Shuishan WANG // Filtre sobel. void Image::sobel2() { clone1(); for(int i = 0 ; i < taille_ ; i++) { for(int j = 0 ; j < taille_ ; j++) { if(i == 0 || j == 0 || i == taille_ - 1 || j == taille_ - 1) { red_[i][j] = 0; blue_[i][j] = 0; green_[i][j] = 0; } red_[i][j] = (red_1[i][j]*0 +red_1[i][j-1]*0 +red_1[i][j+1]*0 +red_1[i-1][j]*2 +red_1[i-1][j+1]*1 +red_1[i-1][j-1]*1 +red_1[i+1][j-1]*-1 +red_1[i+1][j]*-2 +red_1[i+1][j+1]*-1); green_[i][j] = (green_1[i][j]*0 +green_1[i][j-1]*0 +green_1[i][j+1]*0 +green_1[i-1][j]*2 +green_1[i-1][j+1]*1 +green_1[i-1][j-1]*1 +green_1[i+1][j-1]*-1 +green_1[i+1][j]*-2 +green_1[i+1][j+1]*-1); blue_[i][j] = (blue_1[i][j]*0 +blue_1[i][j-1]*0 +blue_1[i][j+1]*0 +blue_1[i-1][j]*2 +blue_1[i-1][j+1]*1 +blue_1[i-1][j-1]*1 +blue_1[i+1][j-1]*-1 +blue_1[i+1][j]*-2 +blue_1[i+1][j+1]*-1); if(red_[i][j] > 255 )red_[i][j] = 255; if (red_[i][j] < 0)red_[i][j] = 0; if(green_[i][j] > 255 )green_[i][j] = 255; if (green_[i][j] < 0)green_[i][j] = 0; if(blue_[i][j] > 255 )blue_[i][j] = 255; if (blue_[i][j] < 0)blue_[i][j] = 0; } } }
//Réaltisé par Shuishan WANG // Filtre 1, flou. void Image::flou() { clone1(); for(int i = 0 ; i < taille_ ; i++) { for(int j = 0 ; j < taille_ ; j++) { if(i == 0 || j == 0 || i == taille_ - 1 || j == taille_ - 1) { red_[i][j] = 0; blue_[i][j] = 0; green_[i][j] = 0; } else { int mRouge; int mVert; int mBleu; red_[i][j] = (red_1[i][j] +red_1[i][j-1] +red_1[i][j+1] +red_1[i-1][j] +red_1[i-1][j+1] +red_1[i-1][j-1] +red_1[i+1][j-1] +red_1[i+1][j] +red_1[i+1][j+1])/9; green_[i][j] = (green_1[i][j] +green_1[i][j-1] +green_1[i][j+1] +green_1[i-1][j] +green_1[i-1][j+1] +green_1[i-1][j-1] +green_1[i+1][j-1] +green_1[i+1][j] +green_1[i+1][j+1])/9; blue_[i][j] = (blue_1[i][j] +blue_1[i][j-1] +blue_1[i][j+1] +blue_1[i-1][j] +blue_1[i-1][j+1] +blue_1[i-1][j-1] +blue_1[i+1][j-1] +blue_1[i+1][j] +blue_1[i+1][j+1])/9; } } } }
//Réaltisé par Shuishan WANG // Filtre sobel. void Image::sobel3() { clone1(); clone2(); for(int i = 0 ; i < taille_ ; i++) { for(int j = 0 ; j < taille_ ; j++) { if(i == 0 || j == 0 || i == taille_ - 1 || j == taille_ - 1) { red_[i][j] = 0; blue_[i][j] = 0; green_[i][j] = 0; } else { red_[i][j] = (red_2[i][j]*0 +red_2[i][j-1]*0 +red_2[i][j+1]*0 +red_2[i-1][j]*2 +red_2[i-1][j+1]*1 +red_2[i-1][j-1]*1 +red_2[i+1][j-1]*-1 +red_2[i+1][j]*-2 +red_2[i+1][j+1]*-1); green_[i][j] = (green_2[i][j]*0 +green_2[i][j-1]*0 +green_2[i][j+1]*0 +green_2[i-1][j]*2 +green_2[i-1][j+1]*1 +green_2[i-1][j-1]*1 +green_2[i+1][j-1]*-1 +green_2[i+1][j]*-2 +green_2[i+1][j+1]*-1); blue_[i][j] = (blue_2[i][j]*0 +blue_2[i][j-1]*0 +blue_2[i][j+1]*0 +blue_2[i-1][j]*2 +blue_2[i-1][j+1]*1 +blue_2[i-1][j-1]*1 +blue_2[i+1][j-1]*-1 +blue_2[i+1][j]*-2 +blue_2[i+1][j+1]*-1); red_[i][j] = red_[i][j]*red_[i][j]; green_[i][j] = green_[i][j]*green_[i][j]; blue_[i][j] = blue_[i][j]*blue_[i][j]; red_1[i][j] = (red_2[i][j]*0 +red_2[i][j-1]*2 +red_2[i][j+1]*-2 +red_2[i-1][j]*0 +red_2[i-1][j+1]*-1 +red_2[i-1][j-1]*1 +red_2[i+1][j-1]*1 +red_2[i+1][j]*0 +red_2[i+1][j+1]*-1); green_1[i][j] = (green_2[i][j]*0 +green_2[i][j-1]*2 +green_2[i][j+1]*-2 +green_2[i-1][j]*0 +green_2[i-1][j+1]*-1 +green_2[i-1][j-1]*1 +green_2[i+1][j-1]*1 +green_2[i+1][j]*0 +green_2[i+1][j+1]*-1); blue_1[i][j] = (blue_2[i][j]*0 +blue_2[i][j-1]*2 +blue_2[i][j+1]*-2 +blue_2[i-1][j]*0 +blue_2[i-1][j+1]*-1 +blue_2[i-1][j-1]*1 +blue_2[i+1][j-1]*1 +blue_2[i+1][j]*0 +blue_2[i+1][j+1]*-1); red_1[i][j] = red_1[i][j]*red_1[i][j]; green_1[i][j] = green_1[i][j]*green_1[i][j]; blue_1[i][j] = blue_1[i][j]*blue_1[i][j]; red_[i][j] = sqrt(red_[i][j] + red_1[i][j]); green_[i][j] = sqrt(green_[i][j] + green_1[i][j]); blue_[i][j] = sqrt(blue_[i][j] + blue_1[i][j]); if(red_[i][j] > 255 )red_[i][j] = 255; if (red_[i][j] < 0)red_[i][j] = 0; if(green_[i][j] > 255 )green_[i][j] = 255; if (green_[i][j] < 0)green_[i][j] = 0; if(blue_[i][j] > 255 )blue_[i][j] = 255; if (blue_[i][j] < 0)blue_[i][j] = 0; } } } }
pid_t launch_child(int flags, child_options *chldopts, int (*fn)(void *), void *arg) { pid_t ret; if(chldopts->daemonize) { ret = fork(); switch(ret) { case 0: /* Do some cleanup in the child */ close_fd(&(chldopts->sfd)); restore_sigmask(&(chldopts->old_sigmask)); /* Become a session leader */ if( setsid() == -1 ) errExit("setsid"); /* In the child, go on */ break; default: /* Parent, drop all capabilities from the permitted capability set */ drop_caps_forever(); return ret; } } need_cap(CAP_SYS_ADMIN); ret = clone1(flags); switch(ret) { case 0: /* Drop all capabilities from the effective capability set */ drop_caps(); /* Do some cleanup in the child */ close_fd(&(chldopts->sfd)); restore_sigmask(&(chldopts->old_sigmask)); /* Call the function */ fn(arg); /* The last call should not have returned */ exit(EXIT_FAILURE); default: if(chldopts->daemonize) /* Parent, we exit right away */ exit(EXIT_SUCCESS); else { /* Parent, drop all capabilities from the permitted capability set */ drop_caps_forever(); return ret; } } }