Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2013, 13:01   #1
Notik
 
Аватар для Notik
 
Регистрация: 14.12.2012
Сообщений: 6
По умолчанию Уменьшение количества цветов в изображении

Здравствуйте! Пишу программу, которая преобразовывает изображение в схему для вышивки. Для этого изображение загружается в программу, разбивается на определенное количество равных квадратных ячеек (пользователь вводит количество необходимых ячеек по ширине изображения, и относительно этого программа разбивает все изображение). Затем в каждой ячейке определяется основной цвет, так чтобы в ячейке был только один цвет, результат выводится на экран. Дальше по задумке необходимо ограничить количество цветов на изображении (необходимое кол-во вводит пользователь) Вот тут то и возникает проблема: Если, скажем, пишем 3 цвета то это не совсем 3 цвета. У нас система RGB, и вот каждый из этих цветов делится на три. т.е. в реальности 3 - это 9. Как-то так.

Работаю в Borland C++ Builder
У меня это записано таким образом:
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int colcol=Edit2->Text.ToInt();
int inclr,outclr,r,g,b;
for (int x=1;x<Image2->Width;x++)
{for (int y=1;y<Image2->Height;y++)
{
inclr=Image2->Canvas->Pixels[x][y];
outclr=MyColors(colcol,inclr);
// r=OneColor(outclr,'R');
// g=OneColor(outclr,'G');
// b=OneColor(outclr,'B');
Image2->Canvas->Pixels[x][y]=outclr;
}
}
}

Последний раз редактировалось Stilet; 17.04.2013 в 20:10.
Notik вне форума Ответить с цитированием
Старый 17.04.2013, 19:57   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Вот тут то и возникает проблема: Если, скажем, пишем 3 цвета то это не совсем 3 цвета. У нас система RGB, и вот каждый из этих цветов делится на три. т.е. в реальности 3 - это 9. Как-то так.
Не так.
Цвет характеризуется спектром. Одним числом охарактеризовать цвет невозможно.
Но человеческий орган зрения (глаз) имеет только три типа цветочувствительных элементов.
Поэтому при формировании изображения для восприятия человеческим глазом применяют существенно упрощенную модель - цвет представляется вектором в 3-мерном цветовом пространстве.
Поэтому и принято представлять цвет тремя числами, которые означают интенсивность красной, зеленой и синей составляющих.
Но все три составляющих - один цвет, один вектор.

Поэтому если Вам нужно использовать именно 3 цвета, то это и будет три цвета и не больше.

Вопрос уменьшения количества цветов достаточно хорошо проработан, т.к. ограниченность ресурсов компьютеров недалекого прошлого требовала решения как раз этой задачи - уменьшение количества цветов до такого, которое позволяет видеокарта.
В случае цветного изображения, как правило, максимально возможное количество цветов составляло 4, 16 или 256.
Используемая трехмерная дискретная модель цвета, используемая сегодня, насчитывает 16777216 цветов.
Вот и решалась задача, как сократить количество цветов с более 16 млн до 4, 16 или 256.

Редуцирование используемого количества цветов требует создания палитры.
Палитра - это полный список используемых цветов (векторов).
Способы задания палитры могут быть различными, в основном их выбор определяется двумя факторами:
- может ли палитра включать все цвета либо их следует выбирать из ограниченного набора (частный случай - фиксированная палитра, которую нельзя менять),
- какой мы используем алгоритм для приведения цветов картинки к выбранной палитре.

Т.к. у Вас задача вышивания, думаю, это как раз случай, когда количество цветов ограничено (например, есть нитки только определенных цветов). Наверное, из них и нужно выбирать цвета палитры.
s-andriano вне форума Ответить с цитированием
Старый 19.05.2015, 23:40   #3
Алексей_Васильевич
Новичок
Джуниор
 
Регистрация: 23.12.2013
Сообщений: 2
По умолчанию

Скиньте исходник пожалуйста
Алексей_Васильевич вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть n цветов разных видов. Составьте все возможные сочетания букетов из всех этих цветов. Количество цветов и их названия вводит lesha18 Паскаль, Turbo Pascal, PascalABC.NET 1 26.02.2013 16:54
Уменьшение размера картинки Дунганчик JavaScript, Ajax 1 11.01.2013 14:17
Уменьшение размера изображения на php уменьшение качества картинки пример class php jpeg gif png xzxz PHP 2 19.11.2012 11:11
уменьшение числа undead92 Общие вопросы Delphi 2 17.04.2012 12:05
Уменьшение кол-ва цветов (Мозаика) mutabor Общие вопросы Delphi 3 29.01.2010 15:32