| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm для Windows/Dos > FASM. Вывод картинки на экран |
| Автор: R71MT 31.7.2015, 11:58 | ||||
| Привет всем! Помогите разобраться с таким вопросом.. Пытаюсь вывести 24-разрядный BMP-рисунок в окно программы. Приложение долно работать в реальном режиме под DOS. Код пишу на FASM'е, но споткнулся о формат BMP-файла, в доках которого говорится, что каждый пиксель описывается тремя байтами(RGB). Я создал в фотошопе рисунок 3х3 пикселя, каждый пиксель залил по-вертикали цветами B-G-R, и открыв получившийся BMP в HEX-редакторе увидел такую картину:
Первые 35h байт занимает заголовок, а сам рисунок начинается в адреса 36h. Размер файла лежит в слове по адресу 02h (у меня 5Сh = 92 байта). В свойствах файла так-же 92 байта. Теперь вопрос.. Если размер файла 92, а заголовок занимает 54 байта, то выходит что полезной инфы в нём 92-54=38 байт. Рисунок у меня 3х3=9 точки, каждая из которых описывается 3-мя байтами, получается 27 байт. От куда ещё 11 байт? Вот картинка, начиная с адреса 36h (без заголовка), ..только полезная инфа:
Цвета RGB определились, а болото нулей в хвостах строк - непонятно что! Дело в том, что разобравшись со-структурой BMP, мне нужно будет перекодировать его в 16-цветный рисунок и вывести на экран в видео/режиме 12h (640x480x16). C этим проблем нет: 4 бита, 3 из которых - цвета, а старший яркость. Проверка на 1, со сдвигами вправо каждого байта. Но как быть в самой картинкой? Или при перекодировки нужно пропускать 3 байта в хвосте? Подскажите, где я туплю.. |
| Автор: _zorn_ 31.7.2015, 19:39 |
И ты не определил что на цвет 4 байта, а не 3 ? ЗЫ: Хз зачем 4й, может прозрачность планировали в BMP.... |
| Автор: R71MT 31.7.2015, 20:43 | ||
| _zorn_, спасибо! Оказывается это выравнивание по-параграфу. Если ширина картинки не кратна 4, то оставшиеся байты забиваются нулями (от 1 до 3). Я попробовал сделать картинку в 4х4 пикселя и нули в конце пропали:
Теперь вожусь с перекодировкой из 24-разрядного BMP в 4-битную палитру. Вроде получается... Хотя ХЗ какой будет результат. |
| Автор: _zorn_ 1.8.2015, 10:36 |
| "Для себя" пойдёт, но больше это никому не нужно |
| Автор: R71MT 1.8.2015, 11:39 |
| ..ну да - это чисто в целях самообразования. Делаю boot-cd и прицеплю туда лого. |
| Автор: R71MT 3.8.2015, 18:05 | ||
| ..подскажите, что не так в коде? Вроде что-то выводит, но ни как не нужную картинку. Размер картинки пока фиксированный - 64х64 пикселей. Вес - 2000h байт: Код:
|
| Автор: R71MT 4.8.2015, 16:12 |
| Сорри! Всё оказывается работает.. Просто я пытался вывести 8-разрядный рисунок BMP, а нужен 24-разрядный |
| Автор: _zorn_ 5.8.2015, 14:56 |
| У 8 разрядного индекса цвета ) Типа как в гифе. |
| Автор: R71MT 5.8.2015, 21:23 |
| ..в итоге, написал отдельно перекодировщик, и подключаю уже 16-цветный рисунок в исходник инструкцией "FILE".. Всё работает... |
| Автор: _zorn_ 5.8.2015, 21:38 |
| А я когда то звёзды рисовал мигающие на паскале поверх планеты, сконверченной из интернета скачаной картинки в 16 бит ) Ностальжи ) |