Материал: Sb98050

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

R:11110010

G:00001101

B:11001010

Алгоритм кодирования информации:

1.Загрузить изображение в память программы.

2.Определить количество доступных пикселей изображения.

3.Определить максимальную длину текста.

4.Загрузить текст в память программы из консоли или файла.

5.Если текст превышает максимально допустимую длину, сообщить об этом пользователю и завершить программу.

6.Организовать цикл по байтам текста и пикселям изображения, кодировать байт текста по схеме 2-3-3 битов на каждый из каналов пикселя.

7.Сохранить изображение на диске в исходном формате.

Алгоритм декодирования разрабатывается похожим образом. Для чтения изображения в формате bmp используется бинарное чтение файлов, заголовок которого описан следующей структурой для 32-битной архитектуры:

#pragma pack(push, 1) typedef struct

{

unsigned char b1,b2; unsigned long bfSize; unsigned short bfReserved1; unsigned short bfReserved2; unsigned long bfOffBits;

} BITMAPFILEHEADER;

typedef struct

 

{

 

unsigned int

biSize;

int

biWidth;

int

biHeight;

unsigned short

biPlanes;

unsigned short

biBitCount;

unsigned int

biCompression;

unsigned int

biSizeImage;

int

biXPelsPerMeter;

int

biYPelsPerMeter;

unsigned int

biClrUsed;

unsigned int

biClrImportant;

} BITMAPINFOHEADER; #pragma pack(pop)

26

Требования к программе. Базово программа должна обеспечивать возможность кодирования текста из таблицы ASCII в изображении формата BMP без компрессии на стандартной палитре. В качестве усложнения программы могут быть реализованы:

Кодирование любого текста из заранее известных кодировок (UTF-16, CP-1251, UTF-8).

Использование других форматов изображения без потерь.

Шифрование текста перед кодированием в изображение для большей защищенности передачи информации.

Использование других схем записи байта текста в пиксель изображения, например, 1 бит текста в 1 пиксель, таким образом, кодировка является менее заметной, но существенно сокращается размер доступного для кодирования текста.

Вопросы для самопроверки:

Зачем используется #pragma pack(push, 1)?

Как осуществляется чтение и запись бинарных файлов?

Что такое формат хранение без потерь?

Что из себя представляет формат bmp?

Что такое бит/байт текста?

Какие каналы используются для хранения информации о цвете пикселя?

Как в программу передаются аргументы при вызове?

Каким могут быть варианты хранения скрытого текста, кроме хранения в изображениях?

Какая информация может быть скрыта?

27

СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ

Страуструп Б. Язык программирования C++. Специальное издание. М.: Изд-во «Бином», 2011.

Орлов С.А. Теория и практика языков программирования: учеб. для вузов. СПб.: Питер, 2013.

Полубенцева М. С/С++. Процедурное программирование. СПб.: БХВПетербург, 2008.

28

СОДЕРЖАНИЕ

 

1. ТИПЫ ДАННЫХ.................................................................................................

3

1.1. Общие понятия.............................................................................................

3

1.2. Основные типы данных...............................................................................

5

1.2.1. Целочисленный тип (char, short (int), int, long (int), long long)......

5

1.2.2. Тип с плавающей точкой...................................................................

7

1.2.3. Булевый тип........................................................................................

7

1.2.4. Символьный тип.................................................................................

7

1.2.5. Массивы..............................................................................................

8

1.2.6. Строки.................................................................................................

8

1.2.7. Ссылка.................................................................................................

9

1.2.8. Указатель.............................................................................................

9

1.2.9. Перечисления ...................................................................................

10

1.2.10. Void..................................................................................................

10

1.3. Приведение типов ......................................................................................

11

1.4. Унарные и бинарные операции.................................................................

11

2. ВЫПОЛНЕНИЕ ПРОГРАММЫ......................................................................

12

2.1. Понятие программы...................................................................................

12

2.2. Операторы ветвления (выбора).................................................................

13

2.3. Циклы ..........................................................................................................

15

2.4. Область видимости переменной...............................................................

16

2.5. Функция и ее аргументы............................................................................

17

3. ПОЛЬЗОВАТЕЛЬСКИЕ СТРУКТУРЫ В C++ ..............................................

18

3.1. Запись структуры.......................................................................................

18

3.2. О размере структуры..................................................................................

19

4. ПРАКТИЧЕСКИЕ ЗАДАНИЯ.........................................................................

20

СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ...............................................

28

29

Пелевин Максим Сергеевич

Введение в программирование на языке C++ с практическими заданиями

Учебно-методическое пособие

Редактор Е. А. Ушакова

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Подписано в печать 20.05.19. Формат 60×84 1/16. Бумага офсетная. Печать цифровая. Печ. л. 2,0.

Гарнитура «Times New Roman». Тираж 81 экз. Заказ 57.

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

Издательство СПбГЭТУ «ЛЭТИ» 197376, С.-Петербург, ул. Проф. Попова, 5

30