![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Mixus |
|
|||
|
Unregistered |
Вопрос такой:
среда разработки Microsoft Visual Studio .NET Visual C++ Win 32 Есть чёрно белая bmp картинка 100 на 100 пикселей, нарисовано несколько черных линий на белом фоне. Нужно получить матрицу 100 на 100 в которой пиксель черного цвета =1 а белого =0. Спомощью каких функций это можно сделать? |
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
ты можешь написать эту функцию сам!!!
Тебе нужно посмотреть организацию формата бмп на сколько я помню там есть заголовок состоящий из 54 байт, далее в зависимости от бмп(8бит, 16бит, 24бит...) может идти таблица цветов(размер вроде 1К), а может и не идти, как уже сказал это зависит от картинки, а потом непосредственно сам рисунок только там есть еще особенность, рисунок вроде как перевернут, точно не помню в общем найди описание или эксперементируй |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
Mixus, вот тебе структура bmp'шки:
Структура Bmp-файлаИмяДлинаСмещениеОписаниеЗаголовок файла (BitMapFileHeader)Type2 0Сигнатура "BM"Size4 2Размер файлаReserved 12 6ЗарезервированоReserved 22 8ЗарезервированоOffsetBits410Смещение изображения от начала файлаИнформационный заголовок (BitMapInfoHeader)Size414Длина заголовкаWidth418Ширина изображения, точкиHeight422Высота изображения, точкиPlanes226Число плоскостейBitCount228Глубина цвета, бит на точкуCompression430Тип компрессии (0 - несжатое изображение)SizeImage434Размер изображения, байтXpelsPerMeter438Горизонтальное разрешение, точки на метрYpelsPerMeter442Вертикальное разрешение, точки на метрColorsUsed446Число используемых цветов (0 - максимально возможное для данной глубины цвета)ColorsImportant450Число основных цветовТаблица цветов (палитра) (ColorTable)ColorTable102454256 элементов по 4 байтаДанные изображения (BitMap Array)ImageSize1078Изображение, записанное по строкам слева направо и снизу вверх Подробнее читай здесь: http://pascal.sources.ru/articles/099.htm Самым лучшим другом в понимании структур файлов тебе будет Norton Commander Если ты создашь файл x.bmp с косой чертой (из левого нижнего к правому верхнему углу ч/б картинки) размером 100х100 и переименуешь его в x в NC, то ты сможешь открыть этот файл в NC нажав F3. Нажава после этого F4 ты увидишь следующее: Присоединённый файл ( Кол-во скачиваний: 35 )
bmp.gif-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| cardinal |
|
||||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
А теперь думай, что к чему. Картинка во-первых перевернута (начинается картинка в файле с нижнего левого угла, а кончается правым верхним)
, а во-вторых инвертирована. То есть 1 это белая точка, а 0 это черная. Теперь ближе к делу. Сигнатуру 'BM' я думаю ты уже видишь. Теперь как пример объясню как узнать где же начинается картинка. Все что для этого надо знать это OffsetBits. То есть находим его (начало на 11 байте) и видим 3E 00 00 00, что в нормальном человеческом представлении означает 00 00 00 3E или просто 62. То есть начиная с 63 байта у нас идет картинка. То есть начало такое (первая строка): 7F FF FF FF FF FF FF FF FF FF FF FF F0 00 00 00. или в битиках: 01111111 11111111 ... 11110000 00000000 00000000 00000000. Осталось только объяснить что за нули оказались в конце строки.
Вот тебе и 16 байт на строку, хотя как бы и (100 + 7) / 8 = 13 достаточно. Короче чтобы посчитать длину строки пользуйся формулой длина строки = ((кол-во пикселей в строке + 7) / 8 + 3 ) / 4 Деление во всех формулах целочисленное.
В твоем случае это 1-bit картинка. Для других картинок кое-что из написанного надо делать иначе. А еще почитай здесь: http://forum.vingrad.ru/index.php?showtopi...ndpost&p=163261 Успехов! -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||||
|
|||||||
| Guest |
|
|||
|
Unregistered |
Спасибо!!!
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |