Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

BMP в C++

5.4K
01 октября 2003 года
DarkStar
1 / / 01.10.2003
Привет всем! Я - новый пользователь этого форума. Хочу поприветствовать всю программирующую общественность, и попросить помочь в одном деле:
в разработке игр на С++ мне приходится выводить на экран разные там картинки. Использую я режим 0х13, тобишь с разрешением 320х200, и палитрой в 256 цветов. Каждый цвет палитры кодируется тремя составляющими red, green, blue. На каждую составляющую идет 64 оттенка. В заголовке BMP файла (цветовая гамма в 256 цветов) находится вся палитра, с той разницей, что в WINDOWS на каждую составляющую приходится 0xFF (256 dec) оттенков! В надежде, что есть разумный коэфициент этому всему, я пробовал делить считанную составляющую на 4 (например, 256/4=64, то есть максимальное значение считанной составляющей из палитры соответствует максимальному значению в режиме 0х13 ). Но успехом увиденное назвать сложно.
Короче. Я все подробно описал. Кто знает, что к чему и как, тот сразу все поймет. Помогите как-то.
// Good bye. Vitaly Pestov. [email]MustDie_25@mail.ru[/email]
P.S. Передаю библиотеку, загружающую 16-цветную БМП-шку. Извините за извращение над программой, но лучше не придумал :-)
487
10 октября 2003 года
ddnh_bc
301 / / 16.09.2003
Может я не совсем корректно понял - но проблема для тебя заключается в разнице градаций цветовых компонентов?

Тобишь тебе нужна палитра RGB где на каждую компоненту цвета приходится 64 градации?

Если так - то могу тебе сразу сказать - что в принципе - в тексте ты привел правильную схему понижения битности цветового компонента.
Возможно у тебя затык в реализации - раз. Во вторых учитывай - что виндовс битмап вообще использует не RGB а BGR - цветовую ориентацию.
Так что если ты используешь RGB в программе - тебе необходимо менять местами B и R компоненты из палитры. В третьих - если я ни разу не ошибаюсь, то виндовс битмап использует палитры не BGR/RGB а RGBA - тобишь 4 компоненты на 1 цвет в палитре.

а по поводу преобразования палитры привожу кусок кода, который работает с палитрой битмапки.

DWORD *swap_rgb;
BYTE palt[0x400];
//256 цветов по 4 компонента на каждый.

swap_rgb=(DWORD*)palt;
for (int i=0;i<0x100;i++)
{
// редуцируем битность компонентов R G B
palt[(i<<2)]>>=2;
palt[(i<<2)+1]>>=2;
palt[(i<<2)+2]>>=2;
// преобразование RGB -> BGR (или наоборот)
swap_rgb=(swap_rgb&0xFF00)|((swap_rgb>>0x10)&0xFF)|((swap_rgb&0xFF)<<0x10);
}

Попробуй так - может поможет - просто других вариантов цветовой редукции нету.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог