Advertisement
Guest User

Untitled

a guest
May 24th, 2015
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.38 KB | None | 0 0
  1. #include <iostream>
  2. #include <Windows.h>
  3. #include <locale>
  4.  
  5. using namespace std;
  6.  
  7. struct RGB
  8. {
  9.  
  10. BYTE Bcolor;
  11. BYTE Gcolor;
  12. BYTE Rcolor;
  13.  
  14. }image[512 * 512], oimage[512 * 512], sepimage[512 * 512];
  15.  
  16. void main()
  17. {
  18. // вещи необходимые для изображения
  19.  
  20. int imgHeight;
  21. int imgWidth;
  22. BITMAPFILEHEADER bmfh;
  23. BITMAPINFOHEADER bmih;
  24. RGBTRIPLE RGBColor;
  25. int x1, x2, y1, y2; //точки
  26. int s = 0, o = 0, p = 0;;
  27. // файлы
  28.  
  29. FILE *inimage;
  30. FILE *outimage;
  31. FILE *sepimager;
  32.  
  33. setlocale(0, "RUSSIAN");
  34. // открытие и считывание header'a нашего входного изображения
  35.  
  36. inimage = fopen("pepper.bmp", "r+b");
  37. fseek(inimage, 0, SEEK_SET);
  38. fread(&bmfh, sizeof(bmfh), 1, inimage);
  39. fread(&bmih, sizeof(bmih), 1, inimage);
  40.  
  41. imgWidth = bmih.biWidth;
  42. imgHeight = bmih.biHeight;
  43.  
  44. // массивы цветов для входяшего изображения
  45.  
  46. BYTE inBcolor[512][512];
  47. BYTE inRcolor[512][512];
  48. BYTE inGcolor[512][512];
  49. BYTE sepBcolor[512][512];
  50. BYTE sepRcolor[512][512];
  51. BYTE sepGcolor[512][512];
  52.  
  53. // построения массивов цветов нашего изображения
  54.  
  55. for (int i = 0; i < 512 * 512; i++)
  56. {
  57. fread(&RGBColor, sizeof(RGBColor), 1, inimage);
  58. image[i].Rcolor = RGBColor.rgbtRed;
  59. image[i].Bcolor = RGBColor.rgbtBlue;
  60. image[i].Gcolor = RGBColor.rgbtGreen;
  61. sepimage[i].Rcolor = RGBColor.rgbtRed;
  62. sepimage[i].Bcolor = RGBColor.rgbtBlue;
  63. sepimage[i].Gcolor = RGBColor.rgbtGreen;
  64. }
  65.  
  66. s = 0;
  67. for (int i = 0; i < 512; i++)
  68. {
  69. for (int j = 0; j < 512; j++)
  70. {
  71. inBcolor[i][j] = image[s].Bcolor;
  72. inRcolor[i][j] = image[s].Rcolor;
  73. inGcolor[i][j] = image[s].Gcolor;
  74. //sepBcolor[i][j] = sepimage[s].Bcolor;
  75. //sepRcolor[i][j] = sepimage[s].Rcolor;
  76. //sepGcolor[i][j] = sepimage[s].Gcolor;
  77. s++;
  78. }
  79. }
  80.  
  81. s = 0;
  82.  
  83. cout << 512 * 512 << " " << s;
  84.  
  85. cout << "Введите координаты:" << endl;
  86. cout << "Введите координату х1: "; cin >> x1;
  87. cout << "Введите координату x2: "; cin >> x2;
  88. if (x1 >= x2 || x1 >= 512 || x2>512)
  89. {
  90. cout << "Недопустимое значение переменных x" << endl;
  91. exit(0);
  92. }
  93. cout << "Введите координату y1: "; cin >> y1;
  94. cout << "Введите координату y2: "; cin >> y2;
  95. if (y1 >= y2 || y1 >= 512 || y2>512)
  96. {
  97. cout << "Недопустимое значение переменных y" << endl;
  98. exit(0);
  99. }
  100. cout << "Размер данного изображения : " << x2 - x1 << "x" << y2 - y1 << endl;
  101. int size = (x2 - x1)*(y2 - y1);
  102. // массив для нового изображения составляется по заданной ширине и длине
  103.  
  104. int **outBcolor = new int*[x2 - x1];
  105. for (int i = 0; i < x2 - x1; i++)
  106. outBcolor[i] = new int[y2 - y1];
  107. int **outRcolor = new int*[x2 - x1];
  108. for (int i = 0; i < x2 - x1; i++)
  109. outRcolor[i] = new int[y2 - y1];
  110. int **outGcolor = new int*[x2 - x1];
  111. for (int i = 0; i < x2 - x1; i++)
  112. outGcolor[i] = new int[y2 - y1];
  113. // CПЕПИЯ
  114. ///////////////////////////////////////////////////
  115. /*
  116. p = 0; o = 0;
  117. for (int i = y1; i < y2; i++)
  118. {
  119. for (int j = x1; j < x2; j++)
  120. {
  121. sepRcolor[i][j] = ((inRcolor[i][j] * 0.393) + (inGcolor[i][j] * 0.769) + (inRcolor[i][j] * 0.189));
  122. sepGcolor[i][j] = ((inRcolor[i][j] * 0.349) + (inGcolor[i][j] * 0.686) + (inRcolor[i][j] * 0.168));
  123. sepBcolor[i][j] = ((inRcolor[i][j] * 0.272) + (inGcolor[i][j] * 0.534) + (inRcolor[i][j] * 0.131));
  124. }
  125. }
  126.  
  127.  
  128.  
  129. p = 0; o = 0;
  130. for (int j = 0; j < 512; j++)
  131. {
  132. for (int i = 0; i < 512; i++)
  133. {
  134. sepimage[p].Rcolor = 255 - sepRcolor[i][j];
  135. sepimage[p].Bcolor = 255 - sepBcolor[i][j];
  136. sepimage[p].Gcolor = 255 - sepGcolor[i][j];
  137. p++;
  138. }
  139. }*/
  140. //ВЫРЕЗАНИЕ
  141. /////////////////////////////////////////////////
  142. p = 0; o = 0;
  143. for (int i = y1; i < y2; i++)
  144. {
  145. for (int j = x1; j < x2; j++)
  146. {
  147. outBcolor[o][p] = inBcolor[i][j];
  148. outRcolor[o][p] = inRcolor[i][j];
  149. outGcolor[o][p] = inGcolor[i][j];
  150. p++;
  151. if (p == y2 - y1)
  152. {
  153. p = 0; o++;
  154. }
  155. }
  156. }
  157.  
  158. o = 0; p = 0;
  159. for (int i = 0; i < 512 * 512; i++)
  160. {
  161. oimage[i].Rcolor = 0;
  162. oimage[i].Bcolor = 0;
  163. oimage[i].Gcolor = 0;
  164. }
  165.  
  166. p = 0; o = 0;
  167. for (int i = 0; i < size; i++)
  168. {
  169. oimage[i].Rcolor = 255 - outRcolor[o][p];
  170. oimage[i].Bcolor = 255 - outBcolor[o][p];
  171. oimage[i].Gcolor = 255 - outGcolor[o][p];
  172. p++;
  173. if (p == y2 - y1)
  174. {
  175. p = 0; o++;
  176. }
  177. }
  178.  
  179. // вывод изображения
  180. bmih.biWidth = imgWidth;
  181. bmih.biHeight = imgHeight;
  182. sepimager = fopen("sepimg.bmp", "w+b");
  183. fwrite(&bmfh, sizeof(bmfh), 1, sepimager);
  184. fwrite(&bmih, sizeof(bmih), 1, sepimager);
  185.  
  186. for (int i = 0; i < 512 * 512; i++)
  187. {
  188. fwrite(&sepimage[i], sizeof(RGB), 1, sepimager);
  189. }
  190.  
  191. bmih.biWidth = x2 - x1;
  192. bmih.biHeight = y2 - y1;
  193. outimage = fopen("output.bmp", "w+b");
  194. fwrite(&bmfh, sizeof(bmfh), 1, outimage);
  195. fwrite(&bmih, sizeof(bmih), 1, outimage);
  196.  
  197. for (int i = 0; i < 512 * 512; i++)
  198. {
  199. fwrite(&oimage[i], sizeof(RGB), 1, outimage);
  200. }
  201.  
  202. // удаление массивов нового изображения
  203. for (int i = 0; i < x2 - x1; i++)
  204. {
  205. delete[] outRcolor[i];
  206. delete[] outBcolor[i];
  207. delete[] outGcolor[i];
  208. }
  209. fcloseall();
  210. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement