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