На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Преобразование BMP 24bit->8bit
    http://www.codenet.ru/progr/video/pallete.php
      Привет!!!

      Деление и сдвиг не совсем то чем стоет пользоваться :)
      Есть более оригинальный способ:
      Суть его описана на: http://www.codenet.ru/progr/video/pallete.php

      Но помоему у тебя эта ссылочка уже есть :)

      Сразу замечу, метод просто о ;D ;Dй, работает как зверь - быстро и сердито. Но есть одно но. Если не оптимезировать то на его работу as is надо памяти ~1.5-2.0Mb.

      Пока :)
      Сообщение отредактировано: GrAnd -
        Если кому интересно, я сегодня написал конвертилку 16 bit WAVE -> 8 bit WAVE. Очень просто делим на 256 и все... Работает. :-)
          для самого корректного преобразования к палитре (без использования шаблонных заливок, шума и других подобных методов) нужно создать табличку со всеми цветами, встретившимся в картинке, отобрать из них 256 самых встречаемых, а потом уже записывать изображение, записывая в результат номер цвета в полученной палитре (или номер цвета, максимально близкому к цвету из палитры)... способ провереный, кто-то даж енто в какую-то прогу затолкал... AdobePhotoshop, что ли, называется... :)
            Цитата asmer, 07.07.02, 20:44:47
            для самого корректного преобразования к палитре (без использования шаблонных заливок, шума и других подобных методов) нужно создать табличку со всеми цветами, встретившимся в картинке, отобрать из них 256 самых встречаемых, а потом уже записывать изображение, записывая в результат номер цвета в полученной палитре (или номер цвета, максимально близкому к цвету из палитры)... способ провереный, кто-то даж енто в какую-то прогу затолкал... AdobePhotoshop, что ли, называется... :)


            Ну а если у тебя на картинке есть что-то маленькое и цветом, который больше не встречается, тогда ты просто его потеряешь. Пример: 256 БОЛЬШИХ полос с уменьшением скажем зеленой составляющей и МАЛЕНЬКИЙ квадрат красного цвета.
              Пардон, по сылке которую дал Sourcer об этом как раз и сказано. Просто я ее только посмотрел.
                Цитата asmer, 07.07.02, 20:44:47
                для самого корректного преобразования к палитре (без использования шаблонных заливок, шума и других подобных методов) нужно создать табличку со всеми цветами, встретившимся в картинке, отобрать из них 256 самых встречаемых, а потом уже записывать изображение, записывая в результат номер цвета в полученной палитре (или номер цвета, максимально близкому к цвету из палитры)... способ провереный, кто-то даж енто в какую-то прогу затолкал... AdobePhotoshop, что ли, называется... :)

                В PhotoShop'е используется алгоритм простого сглаживания цветов, посредством обычного статистического анализа "встречаемости" цвета. И берутся там все существующие цвета и оттенки. Тем более, то что я описал как раз и используется в Adobe
                Сообщение отредактировано: GrAnd -
                  Вообщем я делал все по следующему алгоритму, довольно просто и дает приличный результат
                  L=sqrt((R^2+G^2+B^2)/3)
                  таким вот образом вычисляем среднегеометрическое
                    Цитата
                    http://www.codenet.ru/progr/video/pallete.php

                    Хотелось бы уточнить пару моментов оттуда.
                    Цитата Метод квантования цветов медианным сечением

                    Первый шаг состоит в отсечении "краёв" куба, которые не содержат пикселов. К примеру, если у всех пикселов значения красной компоненты не меньше, чем 8 и не больше, чем 250, то отбрасываются части куба от К="0" до К="7" и от К="251" до К="255."

                    Получается надо пробежатся по всему массиву пикселей битмапа, просмотреть каждую составляющую RGB и только если все пиксели попали под условия(R>=0 || R<=7 || R>=251 || R<=256), отрубить края кубика, а затем тоже самое и для G, и для B - что то не совсем быстрая операция. Поправте, если ерунду несу.
                    Цитата Метод квантования цветов медианным сечением

                    Второй шаг заключается в разрезании полученного параллелепипеда на два в срединной точке (медиане) самой длинной стороны. Если самая длинная сторона параллельна оси B, то компьютер выбирает срединное синее значение из всех синих значений представленных в параллелепипеде (к примеру, 50.000-ое вхождение в отсортированном списке из 100.000 синих значений) и разрезает в этой точке. Теперь параллелепипед разделен на два параллелепипеда меньшего размера, содержащих одинаковое количество пикселов.

                    Самая длинная сторона чего?
                    Цитата Метод квантования цветов медианным сечением

                    Весь предыдущий процесс отсечение пустых "краев" и разрезание самой длинной стороны в срединной точке повторяется для двух меньших параллелепипедов. Теперь исходный куб разделен на четыре параллелепипеда, содержащих приблизительно одинаковое количество пикселов.

                    А разве все такие пустые "края" не были отсечены на первом шаге.

                    Да и совсем не понятно вот это. В 8битный бмп файл после палитры надо писать таблицу соответствия индексов пикселя - его цвету в палитре. Как эту таблицу формировать?
                    Сообщение отредактировано: oldm -
                      Цитата sourcer @
                      http://www.codenet.ru/progr/video/pallete.php

                      а кто-нибудь знает, как подобное применить для ARGB?
                        Вообще, по-хорошему, надо палитру делать кластеризацией. Например, методом K-средних.
                          Median Cut - это тоже что-то вроде кластеризации.
                          Для уменьшения работы можно при генерации цветового куба уменьшить глубину цвета. До 5 бит практически не заметно.
                          У всех этих методов обычно наблюдается один недостаток - выпуклая оболочка выбранных цветов не охватывает все имеющиеся цвета, в результате в некоторых областях не удается смешать цвета.
                          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,0290 ]   [ 14 queries used ]   [ Generated: 18.07.25, 01:22 GMT ]