Advertisement
Guest User

Untitled

a guest
Jul 2nd, 2020
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.69 KB | None | 0 0
  1. #include "helpers.h"
  2. #include <stdio.h>
  3. #include <math.h>
  4. // Convert image to grayscale
  5. void grayscale(int height, int width, RGBTRIPLE image[height][width])
  6. {
  7. for(int i=0;i<height;i++)
  8. {
  9. for(int j = 0;j<width;j++)
  10. {
  11. 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);
  12. }
  13. }
  14. return;
  15. }
  16.  
  17. // Convert image to sepia
  18. void sepia(int height, int width, RGBTRIPLE image[height][width])
  19. {
  20. for(int i =0;i<height;i++)
  21. {
  22. for(int j =0;j<width;j++)
  23. {
  24. RGBTRIPLE k = image[i][j];
  25. int l = round(.393*(float)k.rgbtRed+.769*(float)k.rgbtGreen+.189*(float)k.rgbtBlue);
  26. int m = round(.349*(float)k.rgbtRed+ .686*(float)k.rgbtGreen+.168*(float)k.rgbtBlue);
  27. int n = round(.272*(float)k.rgbtRed+ .534*(float)k.rgbtGreen+.131*(float)k.rgbtBlue);
  28. if(l>255)
  29. {
  30. l = 255;
  31. }
  32. if(m> 255)
  33. {
  34. m = 255;
  35. }
  36. if(n >255)
  37. {
  38. n = 255;
  39. }
  40. image[i][j].rgbtRed = l;
  41. image[i][j].rgbtGreen = m;
  42. image[i][j].rgbtBlue = n;
  43. }
  44. }
  45. return;
  46. }
  47.  
  48. // Reflect image horizontally
  49. void reflect(int height, int width, RGBTRIPLE image[height][width])
  50. {
  51. for(int i = 0;i<height;i++)
  52. {
  53. for(int j =0;j<width;j++)
  54. {
  55. while(j<round((float)1/2*width))
  56. {
  57. RGBTRIPLE temp = image[i][j];
  58. image[i][j] = image[i][width-1-j];
  59. image[i][width-1-j] = temp;
  60. break;
  61. }
  62. }
  63. }
  64. return;
  65. }
  66.  
  67. // Blur image
  68. void blur(int height, int width, RGBTRIPLE image[height][width])
  69. {
  70. float red;
  71. float blue;
  72. float green;
  73. float counter = 0;
  74. RGBTRIPLE copy[height][width];
  75. for(int i =0;i<height;i++)
  76. {
  77. for(int j = 0;j<width;j++)
  78. {
  79. copy[i][j]=image[i][j];
  80. }
  81. }
  82. for(int i =0;i<height;i++)
  83. {
  84. for(int j = 0;j<width;j++)
  85. {
  86. red = image[i][j].rgbtRed;
  87. green = image[i][j].rgbtGreen;
  88. blue = image[i][j].rgbtBlue;
  89. counter++;
  90. //height
  91. if(i==0)
  92. {
  93. red = round(((float)red*counter+image[i+1][j].rgbtRed)/(counter+1));
  94. green = round(((float)green*counter+image[i+1][j].rgbtGreen)/(counter+1));
  95. blue = round(((float)blue*counter+image[i+1][j].rgbtBlue)/(counter+1));
  96. counter++;
  97. }else if(i==height-1)
  98. {
  99. red = round(((float)red*counter+image[i-1][j].rgbtRed)/(counter+1));
  100. blue=round(((float)blue*counter+image[i-1][j].rgbtBlue)/(counter+1));
  101. green=round(((float)green*counter+image[i-1][j].rgbtGreen)/(counter+1));
  102. counter++;
  103. }else
  104. {
  105. red = round(((float)red*counter+image[i-1][j].rgbtRed+image[i+1][j].rgbtRed)/(counter+2));
  106. blue=round(((float)blue*counter+image[i-1][j].rgbtBlue+image[i+1][j].rgbtBlue)/(counter+2));
  107. green = round(((float)green*counter+image[i-1][j].rgbtGreen+image[i+1][j].rgbtBlue)/(counter+2));
  108. counter+=2;
  109. }
  110. //width
  111. if(j==0)
  112. {
  113. red = round(((float)red*counter+image[i][j+1].rgbtRed)/(counter+1));
  114. green = round(((float)green*counter+image[i][j+1].rgbtGreen)/(counter+1));
  115. blue = round(((float)blue*counter+image[i][j+1].rgbtBlue)/(counter+1));
  116. counter++;
  117. }else if(j==width-1)
  118. {
  119. red = round(((float)red*counter+image[i][j-1].rgbtRed)/(counter+1));
  120. green = round(((float)green*counter+image[i][j-1].rgbtGreen)/(counter+1));
  121. blue = round(((float)blue*counter+image[i][j-1].rgbtBlue)/(counter+1));
  122. counter++;
  123. }else
  124. {
  125. red = round(((float)red*counter+image[i][j-1].rgbtRed+image[i][j+1].rgbtRed)/(counter+2));
  126. blue = round(((float)blue*counter+image[i][j-1].rgbtBlue+image[i][j+1].rgbtBlue)/(counter+2));
  127. green = round(((float)green*counter+image[i][j-1].rgbtGreen+image[i][j+1].rgbtGreen)/(counter+2));
  128. counter+=2;
  129. }
  130. //edge case
  131. if(i==0&&j==0)
  132. {
  133. red = round(((float)red*counter+image[i+1][j+1].rgbtRed)/(counter+1));
  134. blue = round(((float)blue*counter+image[i+1][j+1].rgbtBlue)/(counter+1));
  135. green = round(((float)green*counter+image[i+1][j+1].rgbtBlue)/(counter+1));
  136. counter++;
  137. }else if(i==height-1&&j==width-1)
  138. {
  139. red = round(((float)red*counter+image[i-1][j-1].rgbtRed)/(counter+1));
  140. blue = round(((float)blue*counter+image[i-1][j-1].rgbtBlue)/(counter+1));
  141. green = round(((float)green*counter+image[i-1][j-1].rgbtGreen)/(counter+1));
  142. counter++;
  143. }else if(i==height-1&&j==0)
  144. {
  145. red = round(((float)red*counter+image[i-1][j+1].rgbtRed)/(counter+1));
  146. blue = round(((float)blue*counter+image[i-1][j+1].rgbtBlue)/(counter+1));
  147. green = round(((float)green*counter+image[i-1][j+1].rgbtGreen)/(counter+1));
  148. counter++;
  149. }else if(i==0&&j==width-1)
  150. {
  151. red = round(((float)red*counter+image[i+1][j-1].rgbtRed)/(counter+1));
  152. blue = round(((float)blue*counter+image[i+1][j-1].rgbtBlue)/(counter+1));
  153. green = round(((float)green*counter+image[i+1][j-1].rgbtBlue)/(counter+1));
  154. counter++;
  155. }else if(i==0)
  156. {
  157. red = round(((float)red*counter+image[i+1][j-1].rgbtRed+image[i+1][j-1].rgbtBlue)/(counter+2));
  158. blue = round(((float)blue*counter+image[i+1][j-1].rgbtBlue+image[i+1][j-1].rgbtBlue)/(counter+2));
  159. green = round(((float)green*counter+image[i+1][j-1].rgbtGreen+image[i+1][j-1].rgbtGreen)/(counter+2));
  160. counter+=2;
  161. }else if(i==height-1)
  162. {
  163. red = round(((float)red*counter+image[i-1][j-1].rgbtRed+image[i-1][j+1].rgbtRed)/(counter+2));
  164. blue = round(((float)blue*counter+image[i-1][j-1].rgbtBlue+image[i-1][j+1].rgbtBlue)/(counter+2));
  165. green = round(((float)green*counter+image[i-1][j-1].rgbtGreen+image[i-1][j+1].rgbtGreen)/(counter+2));
  166. counter+=2;
  167. }else if(j==0)
  168. {
  169. red = round(((float)red*counter+image[i-1][j+1].rgbtRed+image[i+1][j+1].rgbtRed)/(counter+2));
  170. blue = round(((float)blue*counter+image[i-1][j+1].rgbtBlue+image[i+1][j+1].rgbtBlue)/(counter+2));
  171. green = round(((float)green*counter+image[i-1][j+1].rgbtGreen+image[i+1][j+1].rgbtGreen)/(counter+2));
  172. counter+=2;
  173. }else if(j==width-1)
  174. {
  175. red = round(((float)red*counter+image[i-1][j-1].rgbtRed+image[i+1][j-1].rgbtRed)/(counter+2));
  176. blue = round(((float)blue*counter+image[i-1][j-1].rgbtBlue+image[i+1][j-1].rgbtBlue)/(counter+2));
  177. green = round(((float)green*counter+image[i-1][j-1].rgbtGreen+image[i+1][j-1].rgbtGreen)/(counter+2));
  178. counter+=2;
  179. }else
  180. {
  181. 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));
  182. 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));
  183. 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));
  184. counter+=4;
  185. }
  186. if(red>=255)
  187. {
  188. red=255;
  189. }
  190. if(blue>=255)
  191. {
  192. blue=255;
  193. }
  194. if(green>=255)
  195. {
  196. green=255;
  197. }
  198. copy[i][j].rgbtRed = red;
  199. copy[i][j].rgbtBlue = blue;
  200. copy[i][j].rgbtGreen = green;
  201. }
  202. }
  203. for(int i =0;i<height;i++)
  204. {
  205. for(int j = 0;j<width;j++)
  206. {
  207. image[i][j] = copy[i][j];
  208. }
  209. }
  210. return;
  211. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement