EzicMan

proga

Jan 7th, 2021 (edited)
816
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //    unsigned int Ptr ;                  // смещение к области данных    //10
  2. //    unsigned int Width ;          // ширина изображения в пикселах      //18
  3. //    unsigned int Height ;         // высота изображения в пикселах      //22
  4. #define _CRT_SECURE_NO_WARNINGS
  5.  
  6.  
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10.  
  11. int main(int argc, char** argv) {
  12.     unsigned int w, h, smesh;
  13.     unsigned char* massiv;
  14.     unsigned int otstup;
  15.     unsigned int size;
  16.     unsigned int i;
  17.     unsigned int j;
  18.     unsigned int estnetu;
  19.     FILE* io;
  20.     //проверяем что название файла передали в аргументах
  21.     if (argc < 2) {
  22.         printf("Ne dostatochno argumentov");
  23.         return -1;
  24.     }
  25.  
  26.     //открываем файл проверяя что он вообще существует rb = read binary
  27.     if ((io = fopen(argv[1], "r+b")) == NULL) {
  28.         printf("Net takogo faila");
  29.         return -2;
  30.     }
  31.    
  32.     //достаю из файла размеры картинки они находятся на смещениях 18 и 22
  33.     w = 0;
  34.     h = 0;
  35.     fseek(io, 18, 0);
  36.     if (fread(&w, 4, 1, io) != 1) {
  37.         printf("Oshibka pri chtenii");
  38.         return -3;
  39.     }
  40.     fseek(io, 22, 0);
  41.     if (fread(&h, 4, 1, io) != 1) {
  42.         printf("Oshibka pri chtenii");
  43.         return -3;
  44.     }
  45.     fseek(io, 10, 0);
  46.     if (fread(&smesh, 4, 1, io) != 1) {
  47.         printf("Oshibka pri chtenii");
  48.         return -3;
  49.     }
  50.  
  51.     fseek(io, smesh, 0);
  52.     //по идее в bmp длина каждой строки должна делится на 4 но так как у нас один пиксель занимает 3 байта то надо высчитать сколько в конце надо добавить нулей
  53.     otstup = (4 - (3 * w) % 4) % 4;
  54.     size = w * h * 3 + h * otstup;
  55.     if ((massiv = (unsigned char*)malloc(size * sizeof(unsigned char))) == NULL) {
  56.         printf("Oshibka pri vydelenii pamyati");
  57.         return -4;
  58.     }
  59.     if (fread(massiv, sizeof(unsigned char), size, io) != size) {
  60.         printf("Oshibka pri chtenii");
  61.         return -3;
  62.     }
  63.  
  64.     fseek(io, smesh, 0);
  65.     i = 0;
  66.     j = 0;
  67.     for (i = 0; i < h; i++) {
  68.         for (j = 0; j < w; j++) {
  69.             estnetu = 0;
  70.             //massiv[i*w*3 + j*3 + otstup*i]
  71.             if (massiv[i * w * 3 + j * 3 + otstup * i] != 0
  72.                 || massiv[i * w * 3 + j * 3 + otstup * i + 1] != 0
  73.                 || massiv[i * w * 3 + j * 3 + otstup * i + 2] != 255) {
  74.                 continue;
  75.             }
  76.             if (j != w - 1) {
  77.                 if (massiv[i * w * 3 + (j+1) * 3 + otstup * i] == 255
  78.                     && massiv[i * w * 3 + (j+1) * 3 + otstup * i + 1] == 0
  79.                     && massiv[i * w * 3 + (j+1) * 3 + otstup * i + 2] == 0) {
  80.                     estnetu++;
  81.                 }
  82.             }
  83.             if (j != 0) {
  84.                 if (massiv[i * w * 3 + (j-1) * 3 + otstup * i] == 255
  85.                     && massiv[i * w * 3 + (j-1) * 3 + otstup * i + 1] == 0
  86.                     && massiv[i * w * 3 + (j-1) * 3 + otstup * i + 2] == 0) {
  87.                     estnetu++;
  88.                 }
  89.             }
  90.             if (i != h - 1) {
  91.                 if (massiv[(i+1) * w * 3 + j * 3 + otstup * (i+1)] == 255
  92.                     && massiv[(i+1) * w * 3 + j * 3 + otstup * (i+1) + 1] == 0
  93.                     && massiv[(i+1) * w * 3 + j * 3 + otstup * (i+1) + 2] == 0) {
  94.                     estnetu++;
  95.                 }
  96.             }
  97.             if (i != 0) {
  98.                 if (massiv[(i - 1) * w * 3 + j * 3 + otstup * (i - 1)] == 255
  99.                     && massiv[(i - 1) * w * 3 + j * 3 + otstup * (i - 1) + 1] == 0
  100.                     && massiv[(i - 1) * w * 3 + j * 3 + otstup * (i - 1) + 2] == 0) {
  101.                     estnetu++;
  102.                 }
  103.             }
  104.             if (estnetu > 0) {
  105.                 massiv[i * w * 3 + j * 3 + otstup * i] = 0;
  106.                 massiv[i * w * 3 + j * 3 + otstup * i + 1] = 255;
  107.                 massiv[i * w * 3 + j * 3 + otstup * i + 2] = 0;
  108.             }
  109.         }
  110.     }
  111.  
  112.     fwrite(massiv, sizeof(unsigned char), size, io);
  113.     fclose(io);
  114.     free(massiv);
  115.     return 0;
  116. }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×