- •Анотація
- •Криптографія та шифрування
- •Що таке криптографія?
- •Історія криптографії
- •Що таке шифрування?
- •Термінологія
- •Етапи шифрування
- •Види шифрування
- •Висновки
- •Розробка алгоритму программи шифрування
- •Ціль алгоритму
- •Створення алгоритму з врахуванням цілі
- •Суть роботи алгоритму
- •Фактична реалізація алгоритму
- •Висновки
- •Формат bmp. Опис та специфікація
- •Початкові відомості
- •Структура файлу
- •Складнощі у використанні
- •Висновки
- •Засоби реалізації алгоритму і программи
- •Обрання мови програмування
- •Обрання допоміжних засобів (бібліотек)
- •Висновки
- •Висновки
- •Список літератури
- •Список сайтів
- •Плани щодо майбутнього програми
- •Додаток а. Текст програми
- •Додаток б. Опис бібліотеки easybmp
- •Додаток в. Застосування програми на практиці
Структура файлу
BMP-файл складається з чотирьох частин:
Заголовок файлу (BITMAPFILEHEADER)
Заголовок зображення (BITMAPINFOHEADER, може бути відсутнім). BITMAPV4HEADER (Win95, NT4.0) BITMAPV5HEADER (Win98/Me, 2000/XP)
Палітра (може бути відсутня)
Власне зображення
BITMAPFILEHEADER8:
Ця структура містить інформацію про тип, розмір і подання даних у файлі.
Тип WORD повинен мати розмір 16 біт, типи DWORD і LONG – 32 біта, тип LONG – знаковий, порядок байтів мається на увазі little endian9.
bfType – тип файлу, символи «BM» (в HEX: 0x42 0x4d).
bfSize – розмір всього файлу в байтах.
bfReserved1 і bfReserved2 – зарезервовані, повинні містити нулі.
bfOffBits – містить зміщення в байтах від початку структури BITMAPFILEHEADER до безпосередньо бітів зображення.
BITMAPINFOHEADER (найпростіший випадок):
biSize – розмір структури в байтах.
biWidth – ширина зображення в пікселях. Для Win98/Me і Win2000/XP: якщо поле biCompression містить BI_JPEG або BI_PNG, тут вказана ширина розпакованого зображення.
biHeight – висота зображення в пікселах. Якщо містить позитивне значення - зображення записано в порядку знизу вгору, нульовий піксель в нижньому лівому кутку. Якщо значення від'ємне - зображення записано зверху вниз, нульовий піксел у верхньому лівому куті зображення.
biPlanes – містить одиницю.
biBitCount – вказує кількість біт на піксель.
biCompression – вказує тип стиснення для стиснених зображень.
Палітра:
Палітра може містити послідовність чотирьохбайтові полів за кількістю доступних кольорів (256 для 8-бітного зображення). Три молодші байти кожного поля визначають інтенсивність червоною, зеленою і синьою компоненти кольору, старший байт не використовується. Кожен піксель зображення описаний в такому випадку одним байтом, що містить номер поля палітри, в якому збережений колір цього пікселя.
Якщо піксел зображення описується 16-бітовим числом, палітра може зберігати три двобайтових значення, кожне з яких визначає маску для вилучення з 16-бітного піксела червоною, зеленою і синьою компонент кольору.
Файл BMP може не містити палітри, якщо в ньому зберігається нестиснене повнокольорове зображення.
Власне зображення:
Послідовність пікселів, записаних в тому чи іншому вигляді. Пікселі зберігаються порядково, знизу вгору. Кожен рядок зображення доповнюється нулями до довжини, кратній чотирьом байтам.
В bmp файлах з глибиною кольору 24 біта, байти кольору кожного пікселя зберігаються в порядку BGR (Blue, Green, Red).
B bmp файлах з глибиною кольору 32 біта, байти кольору кожного пікселя зберігаються в порядку BGRA (Blue, Green, Red, Alpha).
Складнощі у використанні
Складнощі виникають у трьох випадках:
Якщо зображення розташоване «ногами вгору» (перший ряд пікселів на місці останнього) то зчитувати зображення потрібно або з кінця до початку, або з початку до кінця але записувати у кінець масиву.
Якщо зображення не 32-бітне, то є можливість появи доповнення - кожен рядок зображення доповнюється нулями до довжини, кратній чотирьом байтам, яке треба «перескакувати».
Якщо зображення стиснене – це вже проблема у використанні і не тільки зображення формату BMP.
Але ці проблеми досить легко вирішуються за при використанні бібліотек з відкритим вихідним кодом як, наприклад, EasyBMP. Адже «навіщо винаходити велосипед», якщо від стоїть у тебе на задньому дворі.