Advertisement
Guest User

Blur function

a guest
Feb 26th, 2020
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 15.33 KB | None | 0 0
  1.  
  2. // Blur image
  3. void blur(int height, int width, RGBTRIPLE image[height][width])
  4. {
  5.     for (int i = 0; i < height; i++)
  6.     {
  7.         for (int j = 0; j < width; j++)
  8.         {
  9.             float divide = 9.0;
  10.             float avg_sumr = 0.0;
  11.             float avg_sumg = 0.0;
  12.             float avg_sumb = 0.0;
  13.             int c = 0;
  14.  
  15.             if (i + 1 >= height) //bottom
  16.                 c = 1;
  17.  
  18.             if (j + 1 >= width) //right
  19.                 c = 2;
  20.  
  21.             if (i - 1 < 0) //top
  22.                 c = 3;
  23.  
  24.             if (j - 1 < 0) //left
  25.                 c = 4;
  26.  
  27.             if (j - 1 < 0 && i + 1 >= height) //bottom left
  28.                 c = 5;
  29.  
  30.             if (j - 1 < 0 && i - 1 < 0) //top left
  31.                 c = 6;
  32.  
  33.             if (i - 1 < 0 && j + 1 >= width) //top right
  34.                 c = 7;
  35.  
  36.             if (i + 1 >= height &&  j + 1 >= width) //bottom right
  37.                 c = 8;
  38.  
  39.             switch(c)
  40.             {
  41.                 case 0:
  42.                     //fine
  43.                     /*
  44.                     ###
  45.                     ###
  46.                     ###*/
  47.                     avg_sumr += image[i][j].rgbtRed;
  48.                     avg_sumg += image[i][j].rgbtGreen;
  49.                     avg_sumb += image[i][j].rgbtBlue;
  50.  
  51.                     avg_sumr += image[i][j + 1].rgbtRed;
  52.                     avg_sumg += image[i][j + 1].rgbtGreen;
  53.                     avg_sumb += image[i][j + 1].rgbtBlue;
  54.  
  55.                     avg_sumr += image[i][j - 1].rgbtRed;
  56.                     avg_sumg += image[i][j - 1].rgbtGreen;
  57.                     avg_sumb += image[i][j - 1].rgbtBlue;
  58.  
  59.                     avg_sumr += image[i + 1][j].rgbtRed;
  60.                     avg_sumg += image[i + 1][j].rgbtGreen;
  61.                     avg_sumb += image[i + 1][j].rgbtBlue;
  62.  
  63.                     avg_sumr += image[i - 1][j].rgbtRed;
  64.                     avg_sumg += image[i - 1][j].rgbtGreen;
  65.                     avg_sumb += image[i - 1][j].rgbtBlue;
  66.  
  67.                     avg_sumr += image[i - 1][j - 1].rgbtRed;
  68.                     avg_sumg += image[i - 1][j - 1].rgbtGreen;
  69.                     avg_sumb += image[i - 1][j - 1].rgbtBlue;
  70.                      
  71.                     avg_sumr += image[i + 1][j + 1].rgbtRed;
  72.                     avg_sumg += image[i + 1][j + 1].rgbtGreen;
  73.                     avg_sumb += image[i + 1][j + 1].rgbtBlue;
  74.                      
  75.                     avg_sumr += image[i - 1][j + 1].rgbtRed;
  76.                     avg_sumg += image[i - 1][j + 1].rgbtGreen;
  77.                     avg_sumb += image[i - 1][j + 1].rgbtBlue;
  78.                      
  79.                     avg_sumr += image[i + 1][j - 1].rgbtRed;
  80.                     avg_sumg += image[i + 1][j - 1].rgbtGreen;
  81.                     avg_sumb += image[i + 1][j - 1].rgbtBlue;
  82.                     avg_sumr = round(avg_sumr / divide);
  83.                     avg_sumg = round(avg_sumg / divide);
  84.                     avg_sumb = round(avg_sumb / divide);
  85.  
  86.  
  87.                     image[i][j].rgbtRed = avg_sumr;
  88.                     image[i][j].rgbtGreen = avg_sumg;
  89.                     image[i][j].rgbtBlue = avg_sumb;
  90.                     break;
  91.  
  92.                 case 1:
  93.                     //cut out bottom
  94.                     /*###
  95.                       ###*/
  96.                     avg_sumr += image[i][j].rgbtRed;
  97.                     avg_sumg += image[i][j].rgbtGreen;
  98.                     avg_sumb += image[i][j].rgbtBlue;
  99.                      
  100.                     avg_sumr += image[i][j + 1].rgbtRed;
  101.                     avg_sumg += image[i][j + 1].rgbtGreen;
  102.                     avg_sumb += image[i][j + 1].rgbtBlue;
  103.                      
  104.                     avg_sumr += image[i][j - 1].rgbtRed;
  105.                     avg_sumg += image[i][j - 1].rgbtGreen;
  106.                     avg_sumb += image[i][j - 1].rgbtBlue;
  107.                      
  108.                     avg_sumr += image[i - 1][j].rgbtRed;
  109.                     avg_sumg += image[i - 1][j].rgbtGreen;
  110.                     avg_sumb += image[i - 1][j].rgbtBlue;
  111.                      
  112.                     avg_sumr += image[i - 1][j + 1].rgbtRed;
  113.                     avg_sumg += image[i - 1][j + 1].rgbtGreen;
  114.                     avg_sumb += image[i - 1][j + 1].rgbtBlue;
  115.                      
  116.                     avg_sumr += image[i - 1][j - 1].rgbtRed;
  117.                     avg_sumg += image[i - 1][j - 1].rgbtGreen;
  118.                     avg_sumb += image[i - 1][j - 1].rgbtBlue;
  119.                     divide = 6.0;
  120.                     avg_sumr = round(avg_sumr / divide);
  121.                     avg_sumg = round(avg_sumg / divide);
  122.                     avg_sumb = round(avg_sumb / divide);
  123.  
  124.  
  125.                     image[i][j].rgbtRed = avg_sumr;
  126.                     image[i][j].rgbtGreen = avg_sumg;
  127.                     image[i][j].rgbtBlue = avg_sumb;
  128.                     break;
  129.  
  130.                 case 2:
  131.                     //cut out right side
  132.                     /*##
  133.                       ##
  134.                       ##*/
  135.                     avg_sumr += image[i][j].rgbtRed;
  136.                     avg_sumg += image[i][j].rgbtGreen;
  137.                     avg_sumb += image[i][j].rgbtBlue;
  138.                      
  139.                     avg_sumr += image[i][j - 1].rgbtRed;
  140.                     avg_sumg += image[i][j - 1].rgbtGreen;
  141.                     avg_sumb += image[i][j - 1].rgbtBlue;
  142.                      
  143.                     avg_sumr += image[i + 1][j].rgbtRed;
  144.                     avg_sumg += image[i + 1][j].rgbtGreen;
  145.                     avg_sumb += image[i + 1][j].rgbtBlue;
  146.                      
  147.                     avg_sumr += image[i - 1][j].rgbtRed;
  148.                     avg_sumg += image[i - 1][j].rgbtGreen;
  149.                     avg_sumb += image[i - 1][j].rgbtBlue;
  150.                      
  151.                     avg_sumr += image[i - 1][j - 1].rgbtRed;
  152.                     avg_sumg += image[i - 1][j - 1].rgbtGreen;
  153.                     avg_sumb += image[i - 1][j - 1].rgbtBlue;
  154.                      
  155.                     avg_sumr += image[i + 1][j - 1].rgbtRed;
  156.                     avg_sumg += image[i + 1][j - 1].rgbtGreen;
  157.                     avg_sumb += image[i + 1][j - 1].rgbtBlue;
  158.                     divide = 6.0;
  159.                     avg_sumr = round(avg_sumr / divide);
  160.                     avg_sumg = round(avg_sumg / divide);
  161.                     avg_sumb = round(avg_sumb / divide);
  162.  
  163.                     image[i][j].rgbtRed = avg_sumr;
  164.                     image[i][j].rgbtGreen = avg_sumg;
  165.                     image[i][j].rgbtBlue = avg_sumb;
  166.                     break;
  167.  
  168.                 case 3:
  169.                     //top
  170.                     /*
  171.                     ###
  172.                     ###*/
  173.                     avg_sumr += image[i][j].rgbtRed;
  174.                     avg_sumg += image[i][j].rgbtGreen;
  175.                     avg_sumb += image[i][j].rgbtBlue;
  176.                      
  177.                     avg_sumr += image[i][j + 1].rgbtRed;
  178.                     avg_sumg += image[i][j + 1].rgbtGreen;
  179.                     avg_sumb += image[i][j + 1].rgbtBlue;
  180.                      
  181.                     avg_sumr += image[i][j - 1].rgbtRed;
  182.                     avg_sumg += image[i][j - 1].rgbtGreen;
  183.                     avg_sumb += image[i][j - 1].rgbtBlue;
  184.                      
  185.                     avg_sumr += image[i + 1][j].rgbtRed;
  186.                     avg_sumg += image[i + 1][j].rgbtGreen;
  187.                     avg_sumb += image[i + 1][j].rgbtBlue;
  188.                      
  189.                     avg_sumr += image[i + 1][j + 1].rgbtRed;
  190.                     avg_sumg += image[i + 1][j + 1].rgbtGreen;
  191.                     avg_sumb += image[i + 1][j + 1].rgbtBlue;
  192.                      
  193.                     avg_sumr += image[i + 1][j - 1].rgbtRed;
  194.                     avg_sumg += image[i + 1][j - 1].rgbtGreen;
  195.                     avg_sumb += image[i + 1][j - 1].rgbtBlue;
  196.                     divide = 6.0;
  197.                     avg_sumr = round(avg_sumr / divide);
  198.                     avg_sumg = round(avg_sumg / divide);
  199.                     avg_sumb = round(avg_sumb / divide);
  200.  
  201.                     image[i][j].rgbtRed = avg_sumr;
  202.                     image[i][j].rgbtGreen = avg_sumg;
  203.                     image[i][j].rgbtBlue = avg_sumb;
  204.                     break;
  205.  
  206.                  case 4:
  207.                     //left
  208.                     /*
  209.                     ##
  210.                     ##
  211.                     ##*/
  212.                     avg_sumr += image[i][j].rgbtRed;
  213.                     avg_sumg += image[i][j].rgbtGreen;
  214.                     avg_sumb += image[i][j].rgbtBlue;
  215.                      
  216.                     avg_sumr += image[i][j + 1].rgbtRed;
  217.                     avg_sumg += image[i][j + 1].rgbtGreen;
  218.                     avg_sumb += image[i][j + 1].rgbtBlue;
  219.                      
  220.                     avg_sumr += image[i + 1][j].rgbtRed;
  221.                     avg_sumg += image[i + 1][j].rgbtGreen;
  222.                     avg_sumb += image[i + 1][j].rgbtBlue;
  223.                      
  224.                     avg_sumr += image[i - 1][j].rgbtRed;
  225.                     avg_sumg += image[i - 1][j].rgbtGreen;
  226.                     avg_sumb += image[i - 1][j].rgbtBlue;
  227.                      
  228.                     avg_sumr += image[i + 1][j + 1].rgbtRed;
  229.                     avg_sumg += image[i + 1][j + 1].rgbtGreen;
  230.                     avg_sumb += image[i + 1][j + 1].rgbtBlue;
  231.                      
  232.                     avg_sumr += image[i - 1][j + 1].rgbtRed;
  233.                     avg_sumg += image[i - 1][j + 1].rgbtGreen;
  234.                     avg_sumb += image[i - 1][j + 1].rgbtBlue;
  235.                      
  236.                     divide = 6.0;
  237.                     avg_sumr = round(avg_sumr / divide);
  238.                     avg_sumg = round(avg_sumg / divide);
  239.                     avg_sumb = round(avg_sumb / divide);
  240.  
  241.                     image[i][j].rgbtRed = avg_sumr;
  242.                     image[i][j].rgbtGreen = avg_sumg;
  243.                     image[i][j].rgbtBlue = avg_sumb;
  244.                     break;
  245.  
  246.                  case 5:
  247.                     //bottom left
  248.                     /*
  249.                     ##
  250.                     ##
  251.                     */
  252.                     avg_sumr += image[i][j].rgbtRed;
  253.                     avg_sumg += image[i][j].rgbtGreen;
  254.                     avg_sumb += image[i][j].rgbtBlue;
  255.                      
  256.                     avg_sumr += image[i][j + 1].rgbtRed;
  257.                     avg_sumg += image[i][j + 1].rgbtGreen;
  258.                     avg_sumb += image[i][j + 1].rgbtBlue;
  259.                      
  260.                     avg_sumr += image[i - 1][j].rgbtRed;
  261.                     avg_sumg += image[i - 1][j].rgbtGreen;
  262.                     avg_sumb += image[i - 1][j].rgbtBlue;
  263.                      
  264.                     avg_sumr += image[i - 1][j + 1].rgbtRed;
  265.                     avg_sumg += image[i - 1][j + 1].rgbtGreen;
  266.                     avg_sumb += image[i - 1][j + 1].rgbtBlue;
  267.                      
  268.                     divide = 4.0;
  269.                     avg_sumr = round(avg_sumr / divide);
  270.                     avg_sumg = round(avg_sumg / divide);
  271.                     avg_sumb = round(avg_sumb / divide);
  272.  
  273.                     image[i][j].rgbtRed = avg_sumr;
  274.                     image[i][j].rgbtGreen = avg_sumg;
  275.                     image[i][j].rgbtBlue = avg_sumb;
  276.                     break;
  277.  
  278.                  case 6:
  279.                     //top left
  280.                     /*
  281.                     ##
  282.                     ##*/
  283.                     avg_sumr += image[i][j].rgbtRed;
  284.                     avg_sumg += image[i][j].rgbtGreen;
  285.                     avg_sumb += image[i][j].rgbtBlue;
  286.                      
  287.                     avg_sumr += image[i][j + 1].rgbtRed;
  288.                     avg_sumg += image[i][j + 1].rgbtGreen;
  289.                     avg_sumb += image[i][j + 1].rgbtBlue;
  290.                      
  291.                     avg_sumr += image[i + 1][j].rgbtRed;
  292.                     avg_sumg += image[i + 1][j].rgbtGreen;
  293.                     avg_sumb += image[i + 1][j].rgbtBlue;
  294.                      
  295.                     avg_sumr += image[i + 1][j + 1].rgbtRed;
  296.                     avg_sumg += image[i + 1][j + 1].rgbtGreen;
  297.                     avg_sumb += image[i + 1][j + 1].rgbtBlue;
  298.                      
  299.                     divide = 4.0;
  300.                     avg_sumr = round(avg_sumr / divide);
  301.                     avg_sumg = round(avg_sumg / divide);
  302.                     avg_sumb = round(avg_sumb / divide);
  303.  
  304.                     image[i][j].rgbtRed = avg_sumr;
  305.                     image[i][j].rgbtGreen = avg_sumg;
  306.                     image[i][j].rgbtBlue = avg_sumb;
  307.                     break;
  308.  
  309.                 case 7:
  310.                     //top right
  311.                     /*
  312.                     ##
  313.                     ##
  314.                     */
  315.                     avg_sumr += image[i][j].rgbtRed;
  316.                     avg_sumg += image[i][j].rgbtGreen;
  317.                     avg_sumb += image[i][j].rgbtBlue;
  318.                      
  319.                     avg_sumr += image[i][j - 1].rgbtRed;
  320.                     avg_sumg += image[i][j - 1].rgbtGreen;
  321.                     avg_sumb += image[i][j - 1].rgbtBlue;
  322.                      
  323.                     avg_sumr += image[i + 1][j].rgbtRed;
  324.                     avg_sumg += image[i + 1][j].rgbtGreen;
  325.                     avg_sumb += image[i + 1][j].rgbtBlue;
  326.                      
  327.                     avg_sumr += image[i + 1][j - 1].rgbtRed;
  328.                     avg_sumg += image[i + 1][j - 1].rgbtGreen;
  329.                     avg_sumb += image[i + 1][j - 1].rgbtBlue;
  330.                     divide = 4.0;
  331.                     avg_sumr = round(avg_sumr / divide);
  332.                     avg_sumg = round(avg_sumg / divide);
  333.                     avg_sumb = round(avg_sumb / divide);
  334.  
  335.                     image[i][j].rgbtRed = avg_sumr;
  336.                     image[i][j].rgbtGreen = avg_sumg;
  337.                     image[i][j].rgbtBlue = avg_sumb;
  338.                     break;
  339.  
  340.                  case 8:
  341.                     //bottom right
  342.                     /*
  343.                     ##
  344.                     ##
  345.                     */
  346.                     avg_sumr += image[i][j].rgbtRed;
  347.                     avg_sumg += image[i][j].rgbtGreen;
  348.                     avg_sumb += image[i][j].rgbtBlue;
  349.                      
  350.                     avg_sumr += image[i][j - 1].rgbtRed;
  351.                     avg_sumg += image[i][j - 1].rgbtGreen;
  352.                     avg_sumb += image[i][j - 1].rgbtBlue;
  353.                      
  354.                     avg_sumr += image[i - 1][j].rgbtRed;
  355.                     avg_sumg += image[i - 1][j].rgbtGreen;
  356.                     avg_sumb += image[i - 1][j].rgbtBlue;
  357.                      
  358.                     avg_sumr += image[i - 1][j - 1].rgbtRed;
  359.                     avg_sumg += image[i - 1][j - 1].rgbtGreen;
  360.                     avg_sumb += image[i - 1][j - 1].rgbtBlue;
  361.                     divide = 4.0;
  362.                     avg_sumr = round(avg_sumr / divide);
  363.                     avg_sumg = round(avg_sumg / divide);
  364.                     avg_sumb = round(avg_sumb / divide);
  365.  
  366.                     image[i][j].rgbtRed = avg_sumr;
  367.                     image[i][j].rgbtGreen = avg_sumg;
  368.                     image[i][j].rgbtBlue = avg_sumb;
  369.                     break;
  370.  
  371.                 default:
  372.                     return;
  373.                     printf("ERROR!");
  374.                     break;
  375.             }
  376.  
  377.         }
  378.     }
  379.  
  380.     return;
  381. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement