На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Преобразование картинки 256 цв в 16
    Помогите пжалуйста!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Мне нужен алгоритм замены цветов в 256 цветовой картинке на 16 основных цветов. По какому алгоритму их заменять. Напишите пожалуйста алгоритм поподробнее, а уж программу я попробую написать(мне нужно прогу написать на MatLab).
    Спасибо
      Это сложнее чем ты думаешь. tongue.gif
      Для 16 стандартных цветов, приведу тебе таблицу цветности:
      Цитата
      // Массив RGBQuad для 16 цветов
      BYTE ArRGB16[64]={0,0,0,0, 0,0,128,0,  0,128,0,0,  0,128,128,0,
                                     128,0,0,0, 128,0,128,0, 128,128,0,0, 192,192,192,0,
                                     128,128,128,0,  0,0,255,0,  0,255,0,0,  0,255,255,0,
                                     255,0,0,0, 255,0,255,0, 255,255,0,0, 255,255,255,0};

      Тут хоть как-то по цифиркам видно где какой цвет. Например ArRGB16[0]- чёрный, ArRGB16[1]- бледный синий, ArRGB16[2]- бледный зелёный, ArRGB16[3]- бирюзовый и т.д.
      Для 256 цветов существует аналогичный массив, тока её размер уже не 64 байта, а 1024. Вытащить её можно из какого-нибудь 256цветного bmp файла. Но далее разбираться в ней и ставить в соответствие группе элементов из массива ArRGB256[], конкретный элемент массива ArRGB16 - такой геморрой. unsure.gif
      Мой тебе совет: не ломай голову и не трать зря время, люди уже решили эту проблему, так что найди готовый конвертер. rolleyes.gif
      Сообщение отредактировано: DrUnkard -
        Думал сегодня как облегчить твой скорбный труд. wink.gif
        Придумал. biggrin.gif
        1) Открываешь любой 256цветный БМП-файл каким-нибудь бинарным просмотрщиком, ну типа HIEW.EXE. Находишь там таблицу цветов. Если не знаешь как, подскажу.
        Аккуратно без ошибок переписываешь её на бумажку. Получаешь массив ArRGB256 состоящий из 256 элементов по 4 байта каждый. Каждый 4-й байт 0 - он нам не нужен.
        2) Перегружаешь комп в режиме 16 цветов.
        3) Заходиш в MS Paint. В главном меню выбираешь Палитра->Изменить палитру...-> Определить цвет.
        4) Для каждого элемента (их 256 штук будет) заводишь свои значения в окошки "Красный", "Синий" и "Зелёный". Смотришь цвет в окне "Цвет|Заливка". Смотреть надо именно то, что отображается в Заливке. Фиксируешь название цвета на бумажке.
        5) В конце концов ты получишь для каждого элемента ArRGB256 соответствующий ему цвет из 16 цветов.
        6) Для массива ArRGB16 делаешь тоже самое.
        7) Те элементы, которые совпали по цвету - и соответствуют друг другу. Вот тебе и таблица замены/преобразования.
        8) Теперь при создании своего 16 цветного БМП файла пишешь в него ArRGB16 и каждый байт из битового массива 256цветного БМП-файла преобразуешь в полубайт битового массива 16цветного БМП-файла. Для этого используешь свою таблицу, которую ты получил на бумажке.
        Vot tak vot.
        Пару дней попотеешь! biggrin.gif
          Смысл всех замен цвета ичешь ближайший в палитре
            Верно. Ищешь максимально близкий к требуемому цвету цвет стандартной палитры. Правда, результат будет страшноват. Для более высокого качества нужно уже использовать дитеринг.

            Вот тебе по поиску ближайшего цвета:

            http://www.enlight.ru/demo/faq/smth.phtml?query=alg_clr_near
              Я предлагаю, как минимум, 4 пикселя использовать вместо одного 256 цветного. Пробовал конвертировать программой в 16 цвета, так он делает 3 на 6 четырехугольник, комбинацией 16 цветов.
                fair7
                Главное, вовремя 8)
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0.0708 ]   [ 15 queries used ]   [ Generated: 5.10.26, 23:53 GMT ]