Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <Windows.h>
- #include <locale>
- using namespace std;
- struct RGB
- {
- BYTE Bcolor;
- BYTE Gcolor;
- BYTE Rcolor;
- }image[512 * 512], oimage[512 * 512], sepimage[512 * 512];
- void main()
- {
- // вещи необходимые для изображения
- int imgHeight;
- int imgWidth;
- BITMAPFILEHEADER bmfh;
- BITMAPINFOHEADER bmih;
- RGBTRIPLE RGBColor;
- int x1, x2, y1, y2; //точки
- int s = 0, o = 0, p = 0;;
- // файлы
- FILE *inimage;
- FILE *outimage;
- FILE *sepimager;
- setlocale(0, "RUSSIAN");
- // открытие и считывание header'a нашего входного изображения
- inimage = fopen("pepper.bmp", "r+b");
- fseek(inimage, 0, SEEK_SET);
- fread(&bmfh, sizeof(bmfh), 1, inimage);
- fread(&bmih, sizeof(bmih), 1, inimage);
- imgWidth = bmih.biWidth;
- imgHeight = bmih.biHeight;
- // массивы цветов для входяшего изображения
- BYTE inBcolor[512][512];
- BYTE inRcolor[512][512];
- BYTE inGcolor[512][512];
- BYTE sepBcolor[512][512];
- BYTE sepRcolor[512][512];
- BYTE sepGcolor[512][512];
- // построения массивов цветов нашего изображения
- for (int i = 0; i < 512 * 512; i++)
- {
- fread(&RGBColor, sizeof(RGBColor), 1, inimage);
- image[i].Rcolor = RGBColor.rgbtRed;
- image[i].Bcolor = RGBColor.rgbtBlue;
- image[i].Gcolor = RGBColor.rgbtGreen;
- sepimage[i].Rcolor = RGBColor.rgbtRed;
- sepimage[i].Bcolor = RGBColor.rgbtBlue;
- sepimage[i].Gcolor = RGBColor.rgbtGreen;
- }
- s = 0;
- for (int i = 0; i < 512; i++)
- {
- for (int j = 0; j < 512; j++)
- {
- inBcolor[i][j] = image[s].Bcolor;
- inRcolor[i][j] = image[s].Rcolor;
- inGcolor[i][j] = image[s].Gcolor;
- //sepBcolor[i][j] = sepimage[s].Bcolor;
- //sepRcolor[i][j] = sepimage[s].Rcolor;
- //sepGcolor[i][j] = sepimage[s].Gcolor;
- s++;
- }
- }
- s = 0;
- cout << 512 * 512 << " " << s;
- cout << "Введите координаты:" << endl;
- cout << "Введите координату х1: "; cin >> x1;
- cout << "Введите координату x2: "; cin >> x2;
- if (x1 >= x2 || x1 >= 512 || x2>512)
- {
- cout << "Недопустимое значение переменных x" << endl;
- exit(0);
- }
- cout << "Введите координату y1: "; cin >> y1;
- cout << "Введите координату y2: "; cin >> y2;
- if (y1 >= y2 || y1 >= 512 || y2>512)
- {
- cout << "Недопустимое значение переменных y" << endl;
- exit(0);
- }
- cout << "Размер данного изображения : " << x2 - x1 << "x" << y2 - y1 << endl;
- int size = (x2 - x1)*(y2 - y1);
- // массив для нового изображения составляется по заданной ширине и длине
- int **outBcolor = new int*[x2 - x1];
- for (int i = 0; i < x2 - x1; i++)
- outBcolor[i] = new int[y2 - y1];
- int **outRcolor = new int*[x2 - x1];
- for (int i = 0; i < x2 - x1; i++)
- outRcolor[i] = new int[y2 - y1];
- int **outGcolor = new int*[x2 - x1];
- for (int i = 0; i < x2 - x1; i++)
- outGcolor[i] = new int[y2 - y1];
- // CПЕПИЯ
- ///////////////////////////////////////////////////
- /*
- p = 0; o = 0;
- for (int i = y1; i < y2; i++)
- {
- for (int j = x1; j < x2; j++)
- {
- sepRcolor[i][j] = ((inRcolor[i][j] * 0.393) + (inGcolor[i][j] * 0.769) + (inRcolor[i][j] * 0.189));
- sepGcolor[i][j] = ((inRcolor[i][j] * 0.349) + (inGcolor[i][j] * 0.686) + (inRcolor[i][j] * 0.168));
- sepBcolor[i][j] = ((inRcolor[i][j] * 0.272) + (inGcolor[i][j] * 0.534) + (inRcolor[i][j] * 0.131));
- }
- }
- p = 0; o = 0;
- for (int j = 0; j < 512; j++)
- {
- for (int i = 0; i < 512; i++)
- {
- sepimage[p].Rcolor = 255 - sepRcolor[i][j];
- sepimage[p].Bcolor = 255 - sepBcolor[i][j];
- sepimage[p].Gcolor = 255 - sepGcolor[i][j];
- p++;
- }
- }*/
- //ВЫРЕЗАНИЕ
- /////////////////////////////////////////////////
- p = 0; o = 0;
- for (int i = y1; i < y2; i++)
- {
- for (int j = x1; j < x2; j++)
- {
- outBcolor[o][p] = inBcolor[i][j];
- outRcolor[o][p] = inRcolor[i][j];
- outGcolor[o][p] = inGcolor[i][j];
- p++;
- if (p == y2 - y1)
- {
- p = 0; o++;
- }
- }
- }
- o = 0; p = 0;
- for (int i = 0; i < 512 * 512; i++)
- {
- oimage[i].Rcolor = 0;
- oimage[i].Bcolor = 0;
- oimage[i].Gcolor = 0;
- }
- p = 0; o = 0;
- for (int i = 0; i < size; i++)
- {
- oimage[i].Rcolor = 255 - outRcolor[o][p];
- oimage[i].Bcolor = 255 - outBcolor[o][p];
- oimage[i].Gcolor = 255 - outGcolor[o][p];
- p++;
- if (p == y2 - y1)
- {
- p = 0; o++;
- }
- }
- // вывод изображения
- bmih.biWidth = imgWidth;
- bmih.biHeight = imgHeight;
- sepimager = fopen("sepimg.bmp", "w+b");
- fwrite(&bmfh, sizeof(bmfh), 1, sepimager);
- fwrite(&bmih, sizeof(bmih), 1, sepimager);
- for (int i = 0; i < 512 * 512; i++)
- {
- fwrite(&sepimage[i], sizeof(RGB), 1, sepimager);
- }
- bmih.biWidth = x2 - x1;
- bmih.biHeight = y2 - y1;
- outimage = fopen("output.bmp", "w+b");
- fwrite(&bmfh, sizeof(bmfh), 1, outimage);
- fwrite(&bmih, sizeof(bmih), 1, outimage);
- for (int i = 0; i < 512 * 512; i++)
- {
- fwrite(&oimage[i], sizeof(RGB), 1, outimage);
- }
- // удаление массивов нового изображения
- for (int i = 0; i < x2 - x1; i++)
- {
- delete[] outRcolor[i];
- delete[] outBcolor[i];
- delete[] outGcolor[i];
- }
- fcloseall();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement