Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.83 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <math.h>
  4. #include <clocale>
  5. int main()
  6. {
  7. setlocale(LC_CTYPE, "rus");
  8. FILE *q, *w, *f, *r; // Здесь q - Исходное изображение, f - Исходный текст, w - Зашифрованное изображение, r - расшифрованный текст
  9. int i, j, k, s = 0, count; // i, j, k, s - показатели счётчика
  10. long int size1, size2 = 0, size = 0;
  11. printf("Введите для кодирования - 1, Введите для декодирования - 2: ");
  12. scanf("%d", &i);
  13. if (i == 1)
  14. {
  15. q = fopen("1.bmp", "rb"); // Открываем рисунок
  16. f = fopen("1.txt", "r"); // Открываем текстовый документ с текстом
  17. char e;
  18. while (!feof(f))
  19. {
  20. e = getc(f);
  21. size2++;
  22. }
  23. fclose(f);
  24. f = fopen("1.txt", "r");
  25. w = fopen("2.bmp", "wb");
  26. {
  27. fseek(q, 0, SEEK_END); //Перемещение указателя позиции в потоке в конец
  28. size1 = ftell(q); //Возвращает текущее значение указателя положения в файле для потока. Это значение представляет собой количество байт, на которое указатель отстоит от начала файла. Запоминает это значение в переменной.
  29. fseek(q, 0, SEEK_SET); //Перемещение указателя позиции в потоке в начало
  30. }
  31. count = size1;
  32. bool buf[8], sym[8];
  33. unsigned char pic, temp; // pic - символ исходного изображения, temp - символ для исходного текста
  34. for (i = 0; i < 54; i++) // Начинаем записывать файлы исходного изображения в новое, записываем первые 54 байта, содержащие заголовок файла (40 байт, содержащие идентификатор BMP- файла, его общий размер, а также зарезервированные поля) и заголовок растра (14 байт, содержащие основные характеристики изображения: ширину, высоту, цветовое разрешение, общий размер растровых данных, их положение относительно начала всего файла.)
  35. {
  36. pic = fgetc(q); //Cчитывание символов из потока и сохранение их в виде строки в параметр до тех пор пока не наступит конец строки или пока не будет достигнут конец файла.
  37. fputc(pic, w); //Записывание содержимого символа исходного изображения в заданный поток.
  38. count--;
  39. }
  40. bool ff[24]; //Число 24 здесь обозначет количество бит, у нас есть три цвета: Красный, синий, зелёный, где каждый цвет (пиксель) кодируется 8 битами. 8*3=24.
  41. for (i = 0; i < 24; i++)
  42. {
  43. ff[i] = size2 % 2;
  44. size2 = size2 / 2;
  45. }
  46. for (i = 0; i < 24; i++)
  47. {
  48. pic = fgetc(q);
  49. for (j = 0; j < 8; j++)
  50. {
  51. buf[j] = (int)pic % 2;
  52. pic = (int)pic / 2;
  53. }
  54. buf[0] = ff[i];
  55. i++;
  56. buf[1] = ff[i];
  57. for (j = 0; j < 8; j++) //В одном байте 8 бит
  58. pic = pic + (int)buf[j] * pow(2.0, (int)j);
  59. fputc(pic, w);
  60. count--;
  61. }
  62. while (!feof(f)) //Записываем текст в изображение
  63. {
  64. temp = fgetc(f);
  65. for (i = 0; i < 8; i++)
  66. {
  67. sym[i] = (int)temp % 2;
  68. temp = (int)temp / 2;
  69. }
  70. for (i = 0; i < 8;)
  71. {
  72. pic = fgetc(q);
  73. for (j = 0; j < 8; j++)
  74. {
  75. buf[j] = (int)pic % 2;
  76. pic = (int)pic / 2;
  77. }
  78. pic = 0;
  79. for (k = 0; k < 8; k++, i++)
  80. {
  81. buf[k] = sym[i];
  82. }
  83. for (j = 0; j < 8; j++)
  84. pic = pic + (int)buf[j] * pow(2.0, (int)j);
  85.  
  86. fputc(pic, w);
  87. count--;
  88. }
  89. s++;
  90. }
  91. while (count)
  92. {
  93. pic = fgetc(q);
  94. fputc(pic, w);
  95. count--;
  96. }
  97. fclose(q);
  98. fclose(f);
  99. fclose(w);
  100. }
  101. else
  102. {printf("Error.n");}
  103. printf("Завершено.n");
  104. getch();
  105. return 0;
  106. }
  107.  
  108. for...
  109. {
  110. ff[i] = size2 % 2;
  111. size2 = size2 / 2;
  112. }
  113.  
  114. (int)buf[j] * pow(2.0, (int)j)
  115.  
  116. buf[j] * (1 << j)
  117.  
  118. (buf[j] << j)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement