Canal Ten Thousand Ответов: 3

Как изменить цвета RGB на их противоположности в C?


У меня есть функция, которая должна менять цвета в изображении на их противоположности. От красного к зеленому, от зеленого к синему и от синего к красному. Я уже некоторое время думаю и пытаюсь, но никак не могу заставить его работать. Однако я знаю, что с моим кодом нет никаких проблем. Потому что изображение действительно меняет цвета, но мне трудно сделать это правильно.

Что я уже пробовал:

Это код, который у меня сейчас есть. Я попытался посмотреть на цветовое колесо, чтобы увидеть, могу ли я переместить цвет пикселя на треть колеса. Диаграмма Цветового Колеса Онлайн[^]

Мой код выглядит так:
void reColor(Image *img) {

	img->height = 200;
	img->width = 150;

	for (unsigned int i = 0; i < img->height; i++)
	{
		for (unsigned int j = 0; j < img->width; j++)
		{
			if ((img->pixels[i][j].r <= 255 && img->pixels[i][j].g <= 255)                        && img->pixels[i][j].b == 0){
				while (img->pixels[i][j].r != 0) {
					img->pixels[i][j].r -= 1;
					img->pixels[i][j].g += 1;
				}
			}
			else if ((img->pixels[i][j].r == 0 && img->pixels[i][j].g 
<= 255) && img->pixels[i][j].b <= 255) {
				while (img->pixels[i][j].g != 0) {
					img->pixels[i][j].g -= 1;
					img->pixels[i][j].b += 1;
				}
			}
			else if ((img->pixels[i][j].r <= 255 && img->pixels[i][j].g == 0) && img->pixels[i][j].b <= 255) {
				while (img->pixels[i][j].b != 0) {
					img->pixels[i][j].b -= 1;
					img->pixels[i][j].r += 1;
				}
			}
		}
	}
}

3 Ответов

Рейтинг:
2

Jeremy Falcon

Если вы хотите перевернутый цвет, который влияет как на оттенок, так и на яркость, подойдет простой инверт.

Просто преобразуйте hex в RGB и инвертируйте каждый канал,

R = R *-1 + 255
G = G *-1 + 255
B = B *-1 + 255


А затем преобразовать обратно в hex.

Если вы хотите противоположный оттенок, не влияя на легкость, самый простой способ-это преобразовать hex в HSL и повернуть оттенок на 180 градусов.

Преобразуйте hex в HSL и поверните H на 180 градусов.

H = H +180 % 360

А затем преобразовать обратно в hex.

Взято из здесь[^] .


Рейтинг:
1

Peter Leow

Они казались противоречивыми:

Цитата:
RGB изменения цвета на противоположные
Цитата:
посмотрите на цветовое колесо, чтобы увидеть, смог ли я переместить цвет пикселя на треть колеса

Если название правильное, то разве это не просто вопрос времени?:
newR = 255 - oldR
newG = 255 - oldG
newB = 255 - oldB

независимо от языка программирования.


Рейтинг:
0

Graeme_Grant

Быстрый поиск CodeProject менее чем за 30 секунд подал этот драгоценный камень: Основы обработки изображений-за кулисами[^]