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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2014, 15:46   #1
Kabahol
Новичок
Джуниор
 
Регистрация: 13.03.2014
Сообщений: 4
По умолчанию сделать программу на C++, которая переводит цветовую модель RGB в модель HSV

Всем привет! Я - начинающий программист. Мне нужна ваша помощь. Мне нужно сделать программу на C++, которая переводит цветовую модель RGB в модель HSV. С чего начать?
Kabahol вне форума Ответить с цитированием
Старый 13.03.2014, 16:24   #2
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

http://ru.wikipedia.org/wiki/HSV_%28..._.E2.86.92_RGB Лучше всего отсюда.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 13.03.2014, 16:26   #3
Kabahol
Новичок
Джуниор
 
Регистрация: 13.03.2014
Сообщений: 4
По умолчанию

Цитата:
Сообщение от _PROGRAMM_ Посмотреть сообщение
http://ru.wikipedia.org/wiki/HSV_%28..._.E2.86.92_RGB Лучше всего отсюда.
Эту страницу я сохранил Я прошу помощи с написанием кода. С чего начать и как?
Нужно формулы с этой страницы перевести в C++-код .

Последний раз редактировалось Kabahol; 13.03.2014 в 16:48.
Kabahol вне форума Ответить с цитированием
Старый 14.03.2014, 15:48   #4
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Я Вас правильно понимаю: нужно RGB координаты перевести в HSV?

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 14.03.2014, 19:02   #5
Kabahol
Новичок
Джуниор
 
Регистрация: 13.03.2014
Сообщений: 4
По умолчанию

Цитата:
Сообщение от _PROGRAMM_ Посмотреть сообщение
Я Вас правильно понимаю: нужно RGB координаты перевести в HSV?
Да. Все верно. Я уже писал программу, но она неверно выдает ответ. Вот код:

Код:
#include <iostream>
using namespace std;

int max(int r, int g, int b);
int min(int r, int g, int b);

int main() {

	int r, g, b;
	cin >> r >> g >> b;

	int h, s, v;
	int p = max(r, g, b);
	int t = min(r, g, b);

	if (p == t)
		h = 0;
	else if (p == r && g >= b)
		h = 60 * ((g - b) / (p - t));
	else if (p == r && g < b)
		h = 60 * ((g - b) / (p - t)) + 360;
	else if (p == g)
		h = 60 * ((b - r) / (p - t)) + 120;
	else if (p == b)
		h = 60 * ((r - g) / (p - t)) + 240;

	if (p == 0)
		s = 0;
	else s = 1 - t / p;

	v = p;

	cout << h << " " << s << " " << v << "\n";
	cin.get();
	cin.get();
	return 0;
}

int max(int r, int g, int b) {
	if (r > g && r > b)
		return r;
	else if (g > r && g > b)
		return g;
	else return b;
}

int min(int r, int g, int b) {
	if (r < g && r < b)
		return r;
	else if (g < r && g < b)
		return g;
	else return b;
}
Kabahol вне форума Ответить с цитированием
Старый 14.03.2014, 19:05   #6
Kabahol
Новичок
Джуниор
 
Регистрация: 13.03.2014
Сообщений: 4
По умолчанию

Еще одну пробовал писать - то же самое.
Код:
#include <iostream>
using namespace std;

int max(int r, int g, int b);
int min(int r, int g, int b);

int main() {

	int r, g, b;
	cout << "Введите значение R (0-1): ";
	cin >> r;
	cout << "Введите значение G (0-1): ";
	cin >> g;
	cout << "Введите значение B (0-1): ";
	cin >> b;

	int h, s, v;
	int p = max(r, g, b);
	int t = min(r, g, b);

	int cr, cg, cb;

	// Определение яркости (V)
	v = p / 255 * 100;

	// Определение насыщенности (S)
	if (v == 0)
		s = 0;
	else s = (v - t) / v;

	// Определение цветового тона (H)
	if (s == 0)
		h = 0;
	else cr = (v - r) / (v - t);
		 cg = (v - g) / (v - t);
		 cb = (v - b) / (v - t);

	// Цветовой тон между желтым и пурпурным
		 if (r == v)
			 h = cb - cg;

	// Цветовой тон между голубым и желтым
		 if (g == v)
			 h = 2 + cr - cb;

	// Цветовой тон между пурпурным и голубым
		 if (b == v)
			 h = 4 + cg - cr;
		 h = h * 60;

	// Приведение к положительным величинам
		 if (h < 0)
			h = h + 360;

	cout << h << " " << s << " " << v << "\n";
	cin.get();
	cin.get();
	return 0;
}

int max(int r, int g, int b) {
	if (r > g && r > b)
		return r;
	else if (g > r && g > b)
		return g;
	else return b;
}

int min(int r, int g, int b) {
	if (r < g && r < b)
		return r;
	else if (g < r && g < b)
		return g;
	else return b;
}
Kabahol вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задачи по теме "моделирование":1) построить модель на графе 2) построить табличную модель 3) решить задачу венгерским методом Елена3110 Помощь студентам 1 05.05.2013 11:03
HSV в RGB конвертация hon Мультимедиа в Delphi 0 25.08.2012 19:16
перевод цветовой схемы (HSV to RGB) ohucheni Общие вопросы C/C++ 0 13.10.2010 20:38
Цветовая модель RGB cw_o Мультимедиа в Delphi 4 10.01.2010 17:08
Требуется написать программу которая переводит файл из одного вида в другой sarudan Помощь студентам 1 11.09.2008 16:17