Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.223.0.53] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Нужен быстрый СУБЖ, может кто видел желательно с исходниками на СЯХ, но токо не Дизеринг, народ помогите плз.
|
Сообщ.
#2
,
|
|
|
Во, вариант - делаешь вектор из 16 млн. байт, каждый элемент которого соответствует цвету, в который надо превратить цвет с номером индекса этого элемента. А потом для каждого байта в потоке делаешь типа
a[i] := vect[a[i]]; Гы. Тупо, но зато вычислений мало, но памяти надо 16 мегов выделять. |
Сообщ.
#3
,
|
|
|
А попроще нельзя разве ?
|
Сообщ.
#4
,
|
|
|
Если честно, то я просто не знаю, как там его преобразовавать (соответствие цветов). Но этот способ довольно шустрый зато.
А вообще - задай этот вопрос в С++, там есть знающие люди. А эту эху никто не читает. |
Сообщ.
#5
,
|
|
|
Формат 24бит BMP есть не что иное как R8G8B8. Другие допустимые форматы
это R5G6B5 - 16бит, R3G3B2 - 8бит.(R,G,B - цвета, цифры - количество бит на каждый цвет) Отсюда следует, что достаточно обычными операциями сдига выделить из 8 бит каждого цвета необходимое тебе количество. ;D ;D ;D R G B 10101111 00101110 01101101 24 бита 01111 101110 01101 16 бит 111 110 01 8 бит |
Сообщ.
#6
,
|
|
|
P.S.
Данную операцию надо проводить для каждой точки. |
Сообщ.
#7
,
|
|
|
В приведенном примере, грубо говоря, 4 части красного, 1 зеленого и две - синего.
Упростим пример, отбросив младшие разряды: R G B 10100000 00100000 01100000 24 бита 00000 100000 00000 16 бит 000 000 000 8 бит т.о. на выходе получим - _черный_. А надо бы, все-таки, поближе к красному Вывод - решение _не_ верное. |
Сообщ.
#8
,
|
|
|
Попробуй данный вариант прогнать через любой графический редактор и ты увидешь то же самое (Но с точным соблюдением цветовой палитры.) Такое преобразование используется всеми графическими редакторами и конверторами. Выходит, что они сами не правы??? А вданном случае ты имеешь цвет, который при переходе к 8 битной палитре превратится строго в черный ;D ;D ;D
|
Сообщ.
#9
,
|
|
|
Для более подробного ознакомления с цветами и преобразованиями советую почитать доки по Direct и по графическим форматам в MSDN ;D ;D ;D
|
Сообщ.
#10
,
|
|
|
На самом деле, оно делается примерно так.
1. Для всех точек уменьшаем глубину цвета тупым делением на 4 (сдвигом, естессно) их R, G и B компонент цвета. 2. производим сортировку полученных цветов и уменьшаем их количество, приравнивая близкие, чтобы общее их число не превысило 256. 3. все цвета взад умножаем на 4. 4. пишем все это в BMP (а все прочие форматы графики - суть есть изврат, ересь и бесовщина )) Причем можно это все сделать (исходя из формата BMP), не загружая картинки. Просто загрузить RGB-компоненты палитры, затем провести преобразование, затем, составив таблицу соответствия "старый номер цвета - новый номер цвета" , записать новый битмап. |
Сообщ.
#11
,
|
|
|
усе правильно, )
позволю себе уточнить кое-что после шага 3 надо сформировать палитру из полученных 256 (или меньше) цветов и записывать в бмп уже ее. а вместо каждого цвета каждого пикселя писать его номер в палитре. |
Сообщ.
#12
,
|
|
|
Цитата GrAnd, 25.05.02, 12:28:36 Формат 24бит BMP есть не что иное как R8G8B8. Другие допустимые форматы это R5G6B5 - 16бит, R3G3B2 - 8бит.(R,G,B - цвета, цифры - количество бит на каждый цвет) Отсюда следует, что достаточно обычными операциями сдига выделить из 8 бит каждого цвета необходимое тебе количество. ;D ;D ;D R G B 10101111 00101110 01101101 24 бита 01111 101110 01101 16 бит 111 110 01 8 бит Нашел маленький баг. Биты надо брать не младшие, а старшие. R G B 10101111 00101110 01101101 24 бита 10101 001011 01101 16 бит 101 001 01 8 бит ;D ;D ;D |
Сообщ.
#13
,
|
|
|
К чему я тебя и подводил в сообщении #6
|
Сообщ.
#14
,
|
|
|
Ну бывает
Хотя сам вроде бы недавно тоько такой бодягой занимался ;D ;D ;D |
Сообщ.
#15
,
|
|
|
Я не вчитывался, но кажется, это то, что нужно:
http://soft.ivanovo.ru/Linux/Gimp/Grokking-the-GIMP-v1.0/node84.html |