![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| Mayday007 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 19.4.2009 Репутация: нет Всего: нет |
Здравствуйте, прошу помочь со считованием моно bmp картинки на канву напрямую с файлом, с 24 битным изображением затруднений не возникло, представляю код на делфи, как реализовать вывод на канву однобитного файла и какова структурная разница между ними?
Я понял только то, что в отличии от 24 б изображения, моно картинка читается по байту на цвет, а не триплексом, и еще: почему абсолютное смещение в моно картинке 62, а не 54 как в 24 б изобр.
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Mayday007 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 19.4.2009 Репутация: нет Всего: нет |
Я наверное тупой, но так и не понял структуру моно битмапа, как доступиться к самим цветам??? Заранее спасибо.
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
1 пиксель 1 бит, в одном байте 8 пикселей. Старший бит в байте крайне левый пиксель, младший крайне правый. Если часть бит не использовано в последнем байте строки, то они могут иметь произвольные значения. Число байт в строке должно быть кратно четырем, если реально получилось не так то дополнительно добавляется от одного до 3х байт, так чтобы полученная длинна была кратна 4м. Цвет пиксела определяется индексом в палитре, которая идет сразу за инфохередом и содержит 2е записи.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Mayday007 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 19.4.2009 Репутация: нет Всего: нет |
Но почему смещение до начала изображения, если судить по файлу 62, а в 24 битном изображ. - смещение 54, что за разница в этих 8 битах??? Палитра.... а еще???
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Палитра это 4 байта на цвет. Монохром 2 цвета, итого 4 * 2 = 8 байт. Палитра всегда идет за инфохедером 54 + 8 байт палитры = 62
Добавлено через 22 секунды 24 битном изображении нет палитры, поэтому нет смещения на 8 байт Добавлено через 3 минуты и 16 секунд P.S. Mayday007 это случаем не вы? Сцылко -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Mayday007 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 19.4.2009 Репутация: нет Всего: нет |
Нет, это не я.)))
и еще если не сложно последний вопрос, как кодируеться сама информация опосля 62 байт??? Вот данные после 62 бит(hex): C0 37 E9 01 C0 00 00 00 00 39 E9 01 00 00 00 00 Палитра 00 00 00 00 FF FF FF 00. Как же расшифровать-то данные? |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Если очередной бит нулевой то пиксель нужно рисовать первым цветом, т.е. (0, 0, 0), если 1, то вторым
(255, 255, 255) -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Mayday007 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 19.4.2009 Репутация: нет Всего: нет |
Допустим вот наш файл:
42 42 00 00 00 00 00 00 00 3E 00 00 00 28 00 00 00 04 00 00 00 01 00 00 00 01 00 01 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 00 00 00 00 FF FF FF 00 50 69 EA 01 Это моно картинка высотой в 1 пикс, и шириной в четыре. 1 пикс-черный, 2-белый, 3-черный, 4 - белый. Эти 4 пиксела описывают 50 69 EA 01, 1пикс - 50, 2- 69, 3 - ЕА, 4 -01. т.е черный цвет это и 50 и ЕА ??? Почему??? не пойму((((( |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Mayday007, вы путаете биты и байты. 1й байт "50" содержит в себе все 4 пиксела.
50 в десятичной системе равно 1010000 в двоичной. 1010 - это 4 пиксела 0000 это дополняют биты до байта 69 EA 01 - 3 байта дополняющие строку до кратности 4м. Так как у нас только 1 рабочий байт, то чтобы дополнить до 4х байт добавляем еще 3. Значение 3х дополнительных байтов может быть произвольным. На практике так и вышло. Там просто мусор. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Mayday007 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 19.4.2009 Репутация: нет Всего: нет |
огромное спасибо, все вышло.))))
|
|||
|
||||
| Mayday007 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 19.4.2009 Репутация: нет Всего: нет |
И последний вопрос
наш файл: 42 4D 46 00 00 00 00 00 00 00 3E 00 00 00 28 00 00 00 05 00 00 00 02 00 00 00 01 00 01 00 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 00 00 00 00 FF FF FF 00 88 F5 EB 01 20 73 EB 01 Это моно картинка высотой в 2 пикс, и шириной в 5. [1,1]pix-черный [1,2]pix-черный [1,3]pix-белый [1,4]pix-черный [1,5]pix-черный [2,1]pix-белый [2,2]pix-черный [2,3]pix-черный [2,4]pix-черный [2,5]pix-белый 10 пикселей - 88 F5 EB 01 20 73 EB 01, 88=10001000, уже с нашей картинкой не сходиться. Как тут быть??? |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Строки в битмапе идут слева направо, снизу вверх, а не сверху вниз как в обычной матрице.
так что 1я строка сверху это число 20 = 0010 0000 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Mayday007 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 19.4.2009 Репутация: нет Всего: нет |
1) Почему мы взяли именно пятый байт?
2) 0010 0000 - первая строка 00100, а на вторую переноситься 000? |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Ой, ну сколько раз повторять. Строка в битмапе выравнивается на 4 байта. Строка не может быть меньше 4х байт. 1я строка она последняя, а последняя строка первая. Тут всего 2е строки, значит последняя вторая. 5пикселов это всего 1 байт, выравнили на границу 4х, получили 4 байта, значит 2я строка начинается с 5го байта, но вторая строка в битмапе она будет первой сверху.
1 байт это 8 бит, не 4 никуда ничего не переносится, просто порядки разделил пробелом -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |