![]() |
|
Модераторы: bsa |
![]()
|
|
| b26041986 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 13.2.2016 Репутация: нет Всего: нет |
Помогите, пожалуйста! Как на С++ можно считать монохромный bmp файл в массив? (Нужно получить матрицу яркости. Т.е. должен получится двумерный int массив из элементов 0...255).
Это сообщение отредактировал(а) b26041986 - 28.3.2016, 01:31 |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
В какой среде программируешь? Если нужна универсальная программа - разбирайся с форматом бмп.
Иначе - используй функции среды для загрузки изображения (обычно она универсальная, и подходит под любой формат) и получения отдельных пикселей (обычно получаешь 32 разрядное число, байты которого прозрачность, красный, зеленый и синий комоненты - для монохромного изображения цветовые компоненты будут одинаковыми). |
|||
|
||||
| rudolfninja |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: 1 Всего: 6 |
Я когда-то писал диссертацию на тему стеганографии, и был у меня там кусок кода, который, насколько я понял, делал то, что вам требуется.
Вот код, правда, это один из чернвых вариантов, но вроде работает: Bmp.h (вам отсюда нужны структуры и метод readFromFile)
Реализация readFromFile
Код несложный, попробуйте разобраться. |
||||
|
|||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Пример не учитывает возможности что пиксель может заниметь 1 байт (что логично для монохромного бмп)
|
|||
|
||||
| b26041986 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 13.2.2016 Репутация: нет Всего: нет |
Использую Dev-Cpp.
появляется ошибка в строке ifstream input(filename, ios::in | ios::binary); Сообщение: `std::ifstream input' has initializer but incomplete type пока еще буду разбираться ... ..... м.б. для такого задания лучше использовать среду по-крупнее? |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Имелось в в виду WinAPI. MFC, Qt и т. д. - у них у всех есть свои методы для работы с изображениями (хотя для Windows всё в итоге сводится к WinAPI).
Вместо ifstream можно использовать <strdio.h>: FILE* input = fopen(filename, "rb"); если тебе это привычнее. Но тогда далее тоже следует использовать stdio. Учти: в 16-разрядной ОС: short - 16, int - 16, long - 32 бит в 32-разрядной ОС: short - 16, int - 32, long - 32 бит в 64-разрядной ОС: short - 16, int - 32, long - 64 бит Для какой разрядности код rudolfninja и правильно ли там определено uint ? |
|||
|
||||
| rudolfninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: 1 Всего: 6 |
||||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
rudolfninja, если бы ты написал typedef unsigned int uint32; - было бы понятно, какую ты хочешь разрядность.
разрядность фундаментальных типов в C++ т.е. при переходе WIN32->WIN64 поменяется только разрядность указателей. но в 64-разрядном Линуксе long будет 64 разрядный. |
|||
|
||||
| Hate42 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 13.2.2016 Репутация: нет Всего: нет |
Спасибо
Это сообщение отредактировал(а) Hate42 - 2.4.2016, 03:07 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |