![]() |
|
|
![]()
|
|
| Guest_Raven |
|
|||
|
Unregistered |
Я написал прогу для прочтения файлов dib - bmp, но некоторые картинки она рисует путём, а некоторые криво. В прямом смысле криво. Достаточно
кое - где поменять <(arg) на <=(arg) и те картинки которые криво рисовались начинают ещё кривее рисоваться, а те что нормально рисовались начинают рисоваться криво, но слегка. Если поменять < на <(arg-1) то тот же эффект, только в другую сторону. Т.е. кривые картинки никак прямо рисоваться не хотят. Или криво влево или криво вправо, а посередине никак А вот ещё одно. В windows цветовые коды другие, нежели в dos'е и чтобы не зависеть от кодировок нужно цвета из палитры рисуемого bmp читать, а там эти хреновы цвета даны как интенсивности трёх составляющих - красного, синего и зелёного. А мне эти три составляющие нах не надо, мне результирующий цвет нужен, т.е. как - то надо эти три компоненты смешать, а вот как? Я думаю это делается на битовом уровне, поэтому придётся писать внешнюю asm - процедуру, вот и послал этот вопрос в asm'овскую тему? P.S. Заранее благодарю за любой ответ. Raven. |
|||
|
||||
| acp |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 4.2.2003 Где: Владимир Репутация: нет Всего: 2 |
Что-то типа
|
|||
|
||||
| acp |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 4.2.2003 Где: Владимир Репутация: нет Всего: 2 |
Или лучше:
Это сообщение отредактировал(а) acp - 8.6.2003, 19:15 |
|||
|
||||
| Guest_Raven |
|
|||
|
Unregistered |
Дык забыл сказать, цветов то 256 а в твоей формуле по ходу их никак 2^24 получается.
|
|||
|
||||
| acp |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 4.2.2003 Где: Владимир Репутация: нет Всего: 2 |
А разве это не стандартная формула? В винде цвет так по моему хранится. Только ещё один первый байт там есть... Всего - 4. А если тебе надо меньше, то наверное придётся проводить выборку по всем этим цветам, что бы получить 256. Я не помню, как формируются эти 256 цветов... |
|||
|
||||
| maxim1000 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
Дело в том, что в bmp каждая строка дополняется битами до длины 32 бита. Если их не учитывать, изображение будет съезжать в бок. Скорее всего, те картинки, которые рисовались правильно, имели ширину строки, кратную 4 байта.
ассемблер - не единственный язык, имеющий возможность оперировать с битами
есть 24-разрадные bmp, где каждый пиксел задается 3 байтами, а есть bmp меньшей разрядности. Вот в них в начале файла пишется палитра. Каждый цвет в палитре - 24 разряда (или 32 - не помню). В палитре - не более 256 цветов. -------------------- qqq |
||||
|
|||||
| Guest_Raven |
|
|||
|
Unregistered |
А как её провести - то, эту выборку? К тому же там палитра циклическая |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
Спасибо. |
|||
|
||||
| a78040767 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 20.4.2003 Где: Новочеркасск Репутация: нет Всего: нет |
Для DOS (BMP 2,16,256 color):
Для каждой составляющей RGB палитры нужно проделать операцию: (для Pascal) R := 63*R div 255 G := 63*G div 255 B := 63*B div 255 а потом вызвать процедуру setRGBpalette(i,R,G,B) i - результирующий цвет. (для Asma) аналогичная процедура: setRGBpalette proc near mov ah,10h mov al,10h mov bx,i mov ch,r mov cl,g mov dh,b int 10h ret setRGBpalette endp или лучше даже через macro (для старого MASMa under DOS) setRGBpalette macro i,r,g,b mov ah,10h mov al,10h mov bx,i mov ch,r mov cl,g mov dh,b int 10h endm |
|||
|
||||
| Guest_Raven |
|
|||
|
Unregistered |
БААААААААААААААААЛЬШОЕ спасибо!!!!!! А то я целый месяц хернёй страдал
|
|||
|
||||
| a78040767 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 20.4.2003 Где: Новочеркасск Репутация: нет Всего: нет |
Так это тебе помогло или нет?
|
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
а не учли что bmp еще и с RLE компрессией бывают?
я знаю ето если 256 цветов то 768 байт палитра (3 байта на цвет) 6 бит в отличие от виндосовских 8 бит тоесть будет 63 градации если картинка 16 24 или 32 бита то палитры как таковой нет цвет точки определяется непосредственно 2 байтами если 16 бит 3 если 24-32 бита -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |