Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "helpers.h"
- #include <stdio.h>
- #include <math.h>
- // Convert image to grayscale
- void grayscale(int height, int width, RGBTRIPLE image[height][width])
- {
- for(int i=0;i<height;i++)
- {
- for(int j = 0;j<width;j++)
- {
- image[i][j].rgbtBlue = image[i][j].rgbtRed = image[i][j].rgbtGreen = round(((float)image[i][j].rgbtBlue+image[i][j].rgbtGreen+image[i][j].rgbtRed)/3);
- }
- }
- return;
- }
- // Convert image to sepia
- void sepia(int height, int width, RGBTRIPLE image[height][width])
- {
- for(int i =0;i<height;i++)
- {
- for(int j =0;j<width;j++)
- {
- RGBTRIPLE k = image[i][j];
- int l = round(.393*(float)k.rgbtRed+.769*(float)k.rgbtGreen+.189*(float)k.rgbtBlue);
- int m = round(.349*(float)k.rgbtRed+ .686*(float)k.rgbtGreen+.168*(float)k.rgbtBlue);
- int n = round(.272*(float)k.rgbtRed+ .534*(float)k.rgbtGreen+.131*(float)k.rgbtBlue);
- if(l>255)
- {
- l = 255;
- }
- if(m> 255)
- {
- m = 255;
- }
- if(n >255)
- {
- n = 255;
- }
- image[i][j].rgbtRed = l;
- image[i][j].rgbtGreen = m;
- image[i][j].rgbtBlue = n;
- }
- }
- return;
- }
- // Reflect image horizontally
- void reflect(int height, int width, RGBTRIPLE image[height][width])
- {
- for(int i = 0;i<height;i++)
- {
- for(int j =0;j<width;j++)
- {
- while(j<round((float)1/2*width))
- {
- RGBTRIPLE temp = image[i][j];
- image[i][j] = image[i][width-1-j];
- image[i][width-1-j] = temp;
- break;
- }
- }
- }
- return;
- }
- // Blur image
- void blur(int height, int width, RGBTRIPLE image[height][width])
- {
- float red;
- float blue;
- float green;
- float counter = 0;
- RGBTRIPLE copy[height][width];
- for(int i =0;i<height;i++)
- {
- for(int j = 0;j<width;j++)
- {
- copy[i][j]=image[i][j];
- }
- }
- for(int i =0;i<height;i++)
- {
- for(int j = 0;j<width;j++)
- {
- red = image[i][j].rgbtRed;
- green = image[i][j].rgbtGreen;
- blue = image[i][j].rgbtBlue;
- counter++;
- //height
- if(i==0)
- {
- red = round(((float)red*counter+image[i+1][j].rgbtRed)/(counter+1));
- green = round(((float)green*counter+image[i+1][j].rgbtGreen)/(counter+1));
- blue = round(((float)blue*counter+image[i+1][j].rgbtBlue)/(counter+1));
- counter++;
- }else if(i==height-1)
- {
- red = round(((float)red*counter+image[i-1][j].rgbtRed)/(counter+1));
- blue=round(((float)blue*counter+image[i-1][j].rgbtBlue)/(counter+1));
- green=round(((float)green*counter+image[i-1][j].rgbtGreen)/(counter+1));
- counter++;
- }else
- {
- red = round(((float)red*counter+image[i-1][j].rgbtRed+image[i+1][j].rgbtRed)/(counter+2));
- blue=round(((float)blue*counter+image[i-1][j].rgbtBlue+image[i+1][j].rgbtBlue)/(counter+2));
- green = round(((float)green*counter+image[i-1][j].rgbtGreen+image[i+1][j].rgbtBlue)/(counter+2));
- counter+=2;
- }
- //width
- if(j==0)
- {
- red = round(((float)red*counter+image[i][j+1].rgbtRed)/(counter+1));
- green = round(((float)green*counter+image[i][j+1].rgbtGreen)/(counter+1));
- blue = round(((float)blue*counter+image[i][j+1].rgbtBlue)/(counter+1));
- counter++;
- }else if(j==width-1)
- {
- red = round(((float)red*counter+image[i][j-1].rgbtRed)/(counter+1));
- green = round(((float)green*counter+image[i][j-1].rgbtGreen)/(counter+1));
- blue = round(((float)blue*counter+image[i][j-1].rgbtBlue)/(counter+1));
- counter++;
- }else
- {
- red = round(((float)red*counter+image[i][j-1].rgbtRed+image[i][j+1].rgbtRed)/(counter+2));
- blue = round(((float)blue*counter+image[i][j-1].rgbtBlue+image[i][j+1].rgbtBlue)/(counter+2));
- green = round(((float)green*counter+image[i][j-1].rgbtGreen+image[i][j+1].rgbtGreen)/(counter+2));
- counter+=2;
- }
- //edge case
- if(i==0&&j==0)
- {
- red = round(((float)red*counter+image[i+1][j+1].rgbtRed)/(counter+1));
- blue = round(((float)blue*counter+image[i+1][j+1].rgbtBlue)/(counter+1));
- green = round(((float)green*counter+image[i+1][j+1].rgbtBlue)/(counter+1));
- counter++;
- }else if(i==height-1&&j==width-1)
- {
- red = round(((float)red*counter+image[i-1][j-1].rgbtRed)/(counter+1));
- blue = round(((float)blue*counter+image[i-1][j-1].rgbtBlue)/(counter+1));
- green = round(((float)green*counter+image[i-1][j-1].rgbtGreen)/(counter+1));
- counter++;
- }else if(i==height-1&&j==0)
- {
- red = round(((float)red*counter+image[i-1][j+1].rgbtRed)/(counter+1));
- blue = round(((float)blue*counter+image[i-1][j+1].rgbtBlue)/(counter+1));
- green = round(((float)green*counter+image[i-1][j+1].rgbtGreen)/(counter+1));
- counter++;
- }else if(i==0&&j==width-1)
- {
- red = round(((float)red*counter+image[i+1][j-1].rgbtRed)/(counter+1));
- blue = round(((float)blue*counter+image[i+1][j-1].rgbtBlue)/(counter+1));
- green = round(((float)green*counter+image[i+1][j-1].rgbtBlue)/(counter+1));
- counter++;
- }else if(i==0)
- {
- red = round(((float)red*counter+image[i+1][j-1].rgbtRed+image[i+1][j-1].rgbtBlue)/(counter+2));
- blue = round(((float)blue*counter+image[i+1][j-1].rgbtBlue+image[i+1][j-1].rgbtBlue)/(counter+2));
- green = round(((float)green*counter+image[i+1][j-1].rgbtGreen+image[i+1][j-1].rgbtGreen)/(counter+2));
- counter+=2;
- }else if(i==height-1)
- {
- red = round(((float)red*counter+image[i-1][j-1].rgbtRed+image[i-1][j+1].rgbtRed)/(counter+2));
- blue = round(((float)blue*counter+image[i-1][j-1].rgbtBlue+image[i-1][j+1].rgbtBlue)/(counter+2));
- green = round(((float)green*counter+image[i-1][j-1].rgbtGreen+image[i-1][j+1].rgbtGreen)/(counter+2));
- counter+=2;
- }else if(j==0)
- {
- red = round(((float)red*counter+image[i-1][j+1].rgbtRed+image[i+1][j+1].rgbtRed)/(counter+2));
- blue = round(((float)blue*counter+image[i-1][j+1].rgbtBlue+image[i+1][j+1].rgbtBlue)/(counter+2));
- green = round(((float)green*counter+image[i-1][j+1].rgbtGreen+image[i+1][j+1].rgbtGreen)/(counter+2));
- counter+=2;
- }else if(j==width-1)
- {
- red = round(((float)red*counter+image[i-1][j-1].rgbtRed+image[i+1][j-1].rgbtRed)/(counter+2));
- blue = round(((float)blue*counter+image[i-1][j-1].rgbtBlue+image[i+1][j-1].rgbtBlue)/(counter+2));
- green = round(((float)green*counter+image[i-1][j-1].rgbtGreen+image[i+1][j-1].rgbtGreen)/(counter+2));
- counter+=2;
- }else
- {
- red = round(((float)red*counter+image[i-1][j-1].rgbtRed+image[i+1][j+1].rgbtRed+image[i-1][j+1].rgbtRed+image[i+1][j-1].rgbtRed)/(counter+4));
- blue = round(((float)blue*counter+image[i-1][j-1].rgbtBlue+image[i+1][j+1].rgbtBlue+image[i-1][j+1].rgbtBlue+image[i+1][j-1].rgbtBlue)/(counter+4));
- green = round(((float)green*counter+image[i-1][j-1].rgbtGreen+image[i+1][j+1].rgbtGreen+image[i-1][j+1].rgbtGreen+image[i+1][j-1].rgbtGreen)/(counter+4));
- counter+=4;
- }
- if(red>=255)
- {
- red=255;
- }
- if(blue>=255)
- {
- blue=255;
- }
- if(green>=255)
- {
- green=255;
- }
- copy[i][j].rgbtRed = red;
- copy[i][j].rgbtBlue = blue;
- copy[i][j].rgbtGreen = green;
- }
- }
- for(int i =0;i<height;i++)
- {
- for(int j = 0;j<width;j++)
- {
- image[i][j] = copy[i][j];
- }
- }
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement