Правила Форума редакция от 22.06.2020 |
|
|
|
|
|
Опции темы | Опции просмотра | Language |
18.04.2013, 20:05 | #1 |
Неактивный пользователь
Пол: Регистрация: 18.04.2013
Сообщений: 1
Репутация: 0
|
Уменьшение количества цветов в изображении
Здравствуйте! Пишу программу, которая преобразовывает изображение в схему для вышивки. Для этого изображение загружается в программу, разбивается на определенное количество равных квадратных ячеек (пользователь вводит количество необходимых ячеек по ширине изображения, и относительно этого программа разбивает все изображение). Затем в каждой ячейке определяется основной цвет, так чтобы в ячейке был только один цвет, результат выводится на экран. Дальше по задумке необходимо ограничить количество цветов на изображении (необходимое кол-во вводит пользователь) Вот тут то и возникает проблема: Если, скажем, пишем 3 цвета то это не совсем 3 цвета. У нас система RGB, и вот кол-во цветов получается не то число, которое вводит пользователь, а это число в третьей степени. Как-то так получается.
Работаю в Borland C++ builder У меня это записано таким образом: int TForm1::MyColors(int ccol, int cpix) { // ccol - кол-во цветов cpix - исходный цвет int ar[255],ag[255],ab[255]; int clrs; // ступень цвета int r,g,b,tmpc,q; q=pow(ccol, 1/3); clrs=255/q; for (int i=1;i<=q;i++) {ar[i]=clrs*i;} ar[0]=0;ar[q+1]=255; //***** for (int i=0;i<=q;i++) {tmpc=OneColor(cpix,'R'); if ((tmpc>=ar[i])&&(tmpc<=ar[i+1])) {r=ar[i];break;} } for (int i=0;i<=q;i++) {tmpc=OneColor(cpix,'G'); if ((tmpc>=ar[i])&&(tmpc<=ar[i+1])) {g=ar[i];break;} } for (int i=0;i<=q;i++) {tmpc=OneColor(cpix,'B'); if ((tmpc>=ar[i])&&(tmpc<=ar[i+1])) {b=ar[i];break;} } //r=OneColor(cpix,'R')/ccol; //g=OneColor(cpix,'G')/ccol; //b=OneColor(cpix,'B')/ccol; return FullColor(r,g,b); } Это как раз функция, которая должна выделить n-е кол-во цветов. Здесь я из введенного числа (кол-ва цветов) извлекаю кубический корень. А здесь кусок программы, где эта функция используется: void __fastcall TForm1::Button2Click(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; } } } Но на выходе все поле заливается черным цветом - это не есть хорошо. Подскажите, пожалуйста, где может быть ошибка. |
Реклама: | неон реклама | grespania alabaster | ноутбук на amd ryzen | кресло-качалки купить недорого | александр михайлов экология души билеты |
Опции темы | |
Опции просмотра | |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Загрузка изображении в таблицу Paradox 7 | Tolkyn S | Delphi | 3 | 04.04.2013 06:12 |
Видеокарта: полосы на изображении. | rebroff | Компьютерные проблемы | 24 | 23.01.2012 19:43 |
ImageSpyer - утилита для скрытия файлов в изображении | Papa lawyer | Графика | 0 | 16.09.2009 07:02 |
Изменение размеров изображении в PHP | savca | PHP | 3 | 25.11.2008 23:25 |
Уменьшение фотографии | lenin12 | Архив | 16 | 02.12.2007 21:55 |
|
|