| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Обработка bmp картинки |
| Автор: Mixus 17.3.2005, 10:38 |
| Вопрос такой: среда разработки Microsoft Visual Studio .NET Visual C++ Win 32 Есть чёрно белая bmp картинка 100 на 100 пикселей, нарисовано несколько черных линий на белом фоне. Нужно получить матрицу 100 на 100 в которой пиксель черного цвета =1 а белого =0. Спомощью каких функций это можно сделать? |
| Автор: chaos 17.3.2005, 14:40 |
| ты можешь написать эту функцию сам!!! Тебе нужно посмотреть организацию формата бмп на сколько я помню там есть заголовок состоящий из 54 байт, далее в зависимости от бмп(8бит, 16бит, 24бит...) может идти таблица цветов(размер вроде 1К), а может и не идти, как уже сказал это зависит от картинки, а потом непосредственно сам рисунок только там есть еще особенность, рисунок вроде как перевернут, точно не помню в общем найди описание или эксперементируй |
| Автор: cardinal 17.3.2005, 15:49 |
| 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 ты увидишь следующее: |
| Автор: cardinal 17.3.2005, 16:23 | ||||||
А теперь думай, что к чему. Картинка во-первых перевернута (начинается картинка в файле с нижнего левого угла, а кончается правым верхним)
, а во-вторых инвертирована. То есть 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?showtopic=23726&view=findpost&p=163261 Успехов! |
| Автор: Guest 21.3.2005, 10:40 |
| Спасибо!!! |