Advertisement
Guest User

Untitled

a guest
Jul 25th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.30 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. #define sizeX (1920/1)
  4. #define sizeY (1080/1)
  5.  
  6. unsigned char in[sizeY/10][sizeX/10][3];
  7. unsigned char out[sizeY][sizeX][3];
  8. unsigned char b[sizeY][sizeX][3];
  9. unsigned char outCopy[sizeY][sizeX][3];
  10. unsigned char header[18];
  11.  
  12. void read(char input[256]) {
  13. FILE* f;
  14. f = fopen(input, "rb");
  15. if(!f) {
  16. printf("File Reading Failed\n");
  17. }
  18. fread(&header, 1, 18, f);
  19. fread(&in, 1, sizeY*sizeX*3, f);
  20. fclose(f);
  21. }
  22.  
  23. void write(char output[256]) {
  24. FILE* fw;
  25. fw = fopen(output, "wb+");
  26. if(!fw) {
  27. printf("File Writing Failed\n");
  28. }
  29. header[16] = 24;
  30. header[13] = sizeX/256;
  31. header[12] = sizeX%256;
  32. header[15] = sizeY/256;
  33. header[14] = sizeY%256;
  34. fwrite(&header, 1, 18, fw);
  35. fwrite(&out, 1, sizeY*sizeX*3, fw);
  36. fclose(fw);
  37. }
  38.  
  39. int a(int n) {
  40. if(n < 0) {
  41. n *= -1;
  42. }
  43. return n;
  44. }
  45.  
  46. void blur(int n) {
  47. int x;
  48. int y;
  49. int bl;
  50. int i;
  51. for(i = 0; i < n; i++) {
  52. for(x = 1; x < sizeX-1; x++) {
  53. for(y = 1; y < sizeY-1; y++) {
  54. bl = 0;
  55. bl += out[y][x][0];
  56. bl += out[y+1][x][0];
  57. bl += out[y-1][x][0];
  58. bl += out[y+1][x+1][0];
  59. bl += out[y+1][x-1][0];
  60. b[y][x][0] = bl/5;
  61. bl = 0;
  62. bl += out[y][x][1];
  63. bl += out[y+1][x][1];
  64. bl += out[y-1][x][1];
  65. bl += out[y+1][x+1][1];
  66. bl += out[y+1][x-1][1];
  67. b[y][x][1] = bl/5;
  68. bl = 0;
  69. bl += out[y][x][2];
  70. bl += out[y+1][x][2];
  71. bl += out[y-1][x][2];
  72. bl += out[y+1][x+1][2];
  73. bl += out[y+1][x-1][2];
  74. b[y][x][2] = bl/5;
  75. }
  76. }
  77. for(x = 1; x < sizeX-1; x++) {
  78. for(y = 1; y < sizeY-1; y++) {
  79. out[y][x][0] = b[y][x][0];
  80. out[y][x][1] = b[y][x][1];
  81. out[y][x][2] = b[y][x][2];
  82. }
  83. }
  84. printf("(%i/%i)\n", i+1, n);
  85. }
  86. }
  87.  
  88. void copyOver() {
  89. int x;
  90. int y;
  91. for(x = 0; x < sizeX; x++) {
  92. for(y = 0; y < sizeY; y++) {
  93. out[y][x][0] = in[y/10][x/10][0];
  94. out[y][x][1] = in[y/10][x/10][1];
  95. out[y][x][2] = in[y/10][x/10][2];
  96. }
  97. }
  98. }
  99.  
  100. void analyze() {
  101. int x;
  102. int y;
  103. int pr;
  104. int pg;
  105. int pb;
  106. int best[5];
  107. int i;
  108. int b;
  109. int bi;
  110. for(x = 0; x < sizeX; x++) {
  111. for(y = 0; y < sizeY; y++) {
  112. outCopy[y][x][0] = out[y][x][0];
  113. outCopy[y][x][1] = out[y][x][1];
  114. outCopy[y][x][2] = out[y][x][2];
  115. }
  116. }
  117. for(x = 0; x < sizeX; x++) {
  118. for(y = 0; y < sizeY; y++) {
  119. pr = a(in[y/10][x/10][2] - outCopy[y][x][2]);
  120. pg = a(in[y/10][x/10][1] - outCopy[y][x][1]);
  121. pb = a(in[y/10][x/10][0] - outCopy[y][x][0]);
  122. best[0] = (pr+pg+pb);
  123. pr = a(in[y/10][x/10-1][2] - outCopy[y][x][2]);
  124. pg = a(in[y/10][x/10-1][1] - outCopy[y][x][1]);
  125. pb = a(in[y/10][x/10-1][0] - outCopy[y][x][0]);
  126. best[1] = (pr+pg+pb);
  127. pr = a(in[y/10][x/10+1][2] - outCopy[y][x][2]);
  128. pg = a(in[y/10][x/10+1][1] - outCopy[y][x][1]);
  129. pb = a(in[y/10][x/10+1][0] - outCopy[y][x][0]);
  130. best[2] = (pr+pg+pb);
  131. pr = a(in[y/10+1][x/10][2] - outCopy[y][x][2]);
  132. pg = a(in[y/10+1][x/10][1] - outCopy[y][x][1]);
  133. pb = a(in[y/10+1][x/10][0] - outCopy[y][x][0]);
  134. best[3] = (pr+pg+pb);
  135. pr = a(in[y/10-1][x/10][2] - outCopy[y][x][2]);
  136. pg = a(in[y/10-1][x/10][1] - outCopy[y][x][1]);
  137. pb = a(in[y/10-1][x/10][0] - outCopy[y][x][0]);
  138. best[4] = (pr+pg+pb);
  139. b = 10000;
  140. bi = 0;
  141. for(i = 0; i < 5; i++) {
  142. if(best[i] < b) {
  143. b = best[i];
  144. bi = i;
  145. }
  146. }
  147. switch(bi) {
  148. case 0:
  149. out[y][x][0] = in[y/10][x/10][0];
  150. out[y][x][1] = in[y/10][x/10][1];
  151. out[y][x][2] = in[y/10][x/10][2];
  152. break;
  153. case 1:
  154. out[y][x][0] = in[y/10][x/10-1][0];
  155. out[y][x][1] = in[y/10][x/10-1][1];
  156. out[y][x][2] = in[y/10][x/10-1][2];
  157. break;
  158. case 2:
  159. out[y][x][0] = in[y/10][x/10+1][0];
  160. out[y][x][1] = in[y/10][x/10+1][1];
  161. out[y][x][2] = in[y/10][x/10+1][2];
  162. break;
  163. case 3:
  164. out[y][x][0] = in[y/10+1][x/10][0];
  165. out[y][x][1] = in[y/10+1][x/10][1];
  166. out[y][x][2] = in[y/10+1][x/10][2];
  167. break;
  168. case 4:
  169. out[y][x][0] = in[y/10-1][x/10][0];
  170. out[y][x][1] = in[y/10-1][x/10][1];
  171. out[y][x][2] = in[y/10-1][x/10][2];
  172. break;
  173. }
  174. }
  175. }
  176. }
  177.  
  178. int main(void) {
  179. printf("Reading...\n");
  180. read("image.tga");
  181. printf("Copying...\n");
  182. copyOver();
  183. printf("Blurring...\n");
  184. blur(200);
  185. printf("Analyzing...\n");
  186. analyze();
  187. printf("Writing...\n");
  188. write("output.tga");
  189. return 0;
  190. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement