![]() |
Страницы (3): [1] 2 3 » Показать все 37 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- C++ Конвертирование BMP 24 -> 8 bit (https://hlfx.ru/forum/showthread.php?threadid=2468)
C++ Конвертирование BMP 24 -> 8 bit
Написал код для конвертирования 24 битных BMP в 8 битные.
В чем суть: считываем из пикселей цвета и заполняем ими палитру, а вместо цветов ставим индекс цвета из палитры.
Потом записываем заголовки + палитра + пиксели.
По неизвестной мне причине, вместо нормального 8 битного изображения получается что-то странное.
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Где изображение этого "странного"?
Ты ж не думаешь всеръез, что мы будем программу запускать?
__________________
Посмотри в папке Debug
test.bmp - оригинал
new.bmp - конвертированная версия.
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
fire64
У меня new.bmp не открывается, пишет, что ошибка в файле. Ты что, не мог как следовает изучить bmp-формат?
Добавлено 27-11-2010 в 01:41:
Очень похоже на то, что ты что-то в формате файла начудил.
__________________
Дядя Миша, хм.
А разве цвет в палитре не задается с помощью 4 байт r, g, b, reserve ?
Вроде бы в 24 битном формате цвет пикселя задается также.
Логично, что палитра имеет 255 слотов под цвета.
А в самом изображении RGBRes заменяется на индекс идентичного цвета в палитре.
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
fire64 на вот тебе для затравки
Почему картинка смещается - ищи сам. Ненавижу эту фишку бмп.
Добавлено 26-11-2010 в 23:01:
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша, если в оригинале, количество цветов больше чем 256, то тогда надо будет менять код GetOrAddPixeltoPallet.
Нужно будет работать с областью значений и подбирать наиболее схожие цвета.
Кстати, почему
for( int i = 0; i < countpixel * 3; i+=3 ) |
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Насчет 4 байт для пикселей, кажется читал в вики.
Мда, все оказывается намного сложней.
Я надеялся, что можно просто в GetOrAddPixeltoPallet заменить
if( Palette[i].rgbRed == pRgbData.r && Palette[i].rgbGreen == pRgbData.g && Palette[i].rgbBlue == pRgbData.b ) |
if( CompareColor( Palette[i], pRgbData, 30 ) ) |
1 | bool CompareColor( RGBQUAD Palette, rgbdata_t pRgbData, int maxvalue ) |
2 | { |
3 | if( Palette.rgbRed + maxvalue < pRgbData.r || Palette.rgbRed - maxvalue > pRgbData.r ) |
4 | { |
5 | return false; |
6 | } |
7 |
8 | if( Palette.rgbGreen + maxvalue < pRgbData.g || Palette.rgbGreen - maxvalue > pRgbData.g ) |
9 | { |
10 | return false; |
11 | } |
12 |
13 | if( Palette.rgbBlue + maxvalue < pRgbData.b || Palette.rgbBlue - maxvalue > pRgbData.b ) |
14 | { |
15 | return false; |
16 | } |
17 |
18 | return true; |
19 | } |
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Только что, взял свой аватар и сохранил в 24 битном bmp.
Изображение нормально сконвертировалось, но перепутались цветовые каналы.
вместо RGB, BGR
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Здрасти. Ну BMP это и есть BGR.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
fire64, в 24-х битном BMP для покраски пикселов надо 3 байта (b,g,r). Никаких реверсов там нет. Да и из количества битов все понятно. Это тебе не 32-битный BMP.
Временная зона GMT. Текущее время 08:59. | Страницы (3): [1] 2 3 » Показать все 37 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024