Advertisement
Slapoguzov

LSP_lab2

Oct 16th, 2014
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.95 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5. //#include "stdafx.h"
  6.  
  7. #pragma pack(push, 2)
  8. typedef struct {
  9.     char signature[2];
  10.     int size;
  11.     short emptyField1;
  12.     short emptyField2;
  13.     int data;
  14.     int lengthHead;
  15.     int width;
  16.     int heidth;
  17.     short countColorPlace;
  18.     short bit;
  19.     char methodArch[4];
  20.     int lengthRastrMas;
  21.     int gorisResolution;
  22.     int vertResolution;
  23.     int countColorPic;
  24.     int countMainColor;
  25. } head_bmp;
  26. #pragma pack(pop)
  27.  
  28. char nameFile[] = "1.bmp";
  29.  
  30. int saveImg(char *buf, head_bmp head, int width, int heigth, int comp)
  31. {
  32.     FILE *f;
  33.     f = fopen("1_1_1.bmp", "wb");
  34.  
  35.     fwrite(&head.signature, sizeof(char), 2, f);
  36.  
  37.     fwrite(&head.size, sizeof(int), 1, f);
  38.     fseek(f, sizeof(char)* 2 + sizeof(int)+4, SEEK_SET);
  39.     fwrite(&head.data, sizeof(int), 1, f);
  40.  
  41.         fwrite(&head.lengthHead, sizeof(int), 1, f);
  42.         fwrite(&head.width, sizeof(int), 1, f);
  43.         fwrite(&head.heidth, sizeof(int), 1, f);
  44.         fwrite(&head.countColorPlace, sizeof(short), 1, f);
  45.         fwrite(&head.bit, sizeof(short), 1, f);
  46.         fwrite(&head.methodArch, sizeof(char), 4, f);
  47.         fwrite(&head.lengthRastrMas, sizeof(int), 1, f);
  48.         fwrite(&head.gorisResolution, sizeof(int), 1, f);
  49.         fwrite(&head.vertResolution, sizeof(int), 1, f);
  50.         fwrite(&head.countColorPic, sizeof(int), 1, f);
  51.         fwrite(&head.countMainColor, sizeof(int), 1, f);
  52.         fseek(f, head.data, SEEK_SET);
  53.         fwrite(buf, sizeof(char)* ((3 * width*heigth) + (comp*heigth)), 1, f);
  54.         fclose(f);
  55.  
  56.     return 0;
  57. }
  58.  
  59. int main()
  60. {
  61.     head_bmp imgHead;
  62.     FILE* f;   
  63.     char *buffer;
  64.     char *temp;
  65.     int comp;
  66.     fpos_t *posData;
  67.     int i, j = 0;
  68.     char t,p;
  69.     int index,w;
  70.  
  71.  
  72.     if ((f = fopen("1.bmp", "rb")) == NULL)
  73.     {
  74.         printf("Ошибочка вышла: файла не существует");
  75.         return -1;
  76.     }
  77.  
  78.     fread(&imgHead, sizeof(char)*54, 1, f);
  79.     /*if (imgHead.signature[0] == 66 && imgHead.signature[1] == 77)
  80.     {
  81.  
  82.         fread(&imgHead.size, sizeof(int), 1, f);
  83.         fseek(f, sizeof(char) * 2 + sizeof(int) + 4, SEEK_SET);
  84.         fread(&imgHead.data, sizeof(int), 1, f);
  85.  
  86.         fread(&imgHead.lengthHead, sizeof(int), 1, f);
  87.         fread(&imgHead.width, sizeof(int), 1, f);
  88.         fread(&imgHead.heidth, sizeof(int), 1, f);
  89.         fread(&imgHead.countColorPlace, sizeof(short), 1, f);
  90.         fread(&imgHead.bit, sizeof(short), 1, f);
  91.         fread(&imgHead.methodArch, sizeof(char), 4, f);
  92.         fread(&imgHead.lengthRastrMas, sizeof(int), 1, f);
  93.         fread(&imgHead.gorisResolution, sizeof(int), 1, f);
  94.         fread(&imgHead.vertResolution, sizeof(int), 1, f);
  95.         fread(&imgHead.countColorPic, sizeof(int), 1, f);
  96.         fread(&imgHead.countMainColor, sizeof(int), 1, f);
  97.  
  98.     }
  99.     else
  100.     {
  101.         printf("Ошибочка вышла: файла не формата BMP");
  102.         fclose(f);
  103.     }*/
  104.  
  105.     if (imgHead.bit == 24)
  106.     {
  107.         comp = (4 - (3*imgHead.width) % 4);
  108.         buffer = (char*)malloc(sizeof(char) * ((3 * imgHead.width*imgHead.heidth) + (comp*imgHead.heidth)));
  109.  
  110.         fseek(f, imgHead.data, SEEK_SET);
  111.         fread(buffer, sizeof(char)* ((3 * imgHead.width*imgHead.heidth) + (comp*imgHead.heidth)), 1, f);
  112.  
  113.         for (i = 1; i <= imgHead.heidth; i = i + 1)
  114.         {
  115.             index = 3 * (i - 1)*imgHead.width + (i - 1)*comp;
  116.             w = (int)3 * floor(imgHead.width / 2);
  117.             for (j = 0; j <= w; j = j + 3)
  118.             {
  119.                
  120.                 t = buffer[index + j];
  121.                 buffer[index + j] = buffer[3 * i*imgHead.width - j - 3 + (i-1)*comp];
  122.                 buffer[3 * i*imgHead.width - j - 3 + (i-1)*comp] = t;
  123.  
  124.                 t = buffer[index + j + 1];
  125.                 buffer[index + j + 1] = buffer[3 * i*imgHead.width - j - 2 + (i-1)*comp];
  126.                 buffer[3 * i*imgHead.width - j -2 + (i-1)*comp] = t;
  127.  
  128.                 t = buffer[index + j + 2];
  129.                 buffer[index + j + 2] = buffer[3 * i*imgHead.width - j-1 + (i-1)*comp];
  130.                 buffer[3 * i*imgHead.width - j-1 + (i-1)*comp] = t;
  131.             }
  132.         }
  133.        
  134.         saveImg(buffer, imgHead, imgHead.width, imgHead.heidth, comp);
  135.        
  136.  
  137.     }
  138.     else
  139.     {
  140.         printf("Ошибочка вышла: глубина цвета должна быть равна 24");
  141.         fclose(f);
  142.     }
  143.  
  144.     printf("Hello World");
  145.  
  146.  
  147.     return 0;
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement