C#

С# Разработайте и реализуйте собственный алгоритм, переводящий изображение в градациях серого цвета в цвет.

Градация задаётся кодом ниже.
 // Циклы для перебора всех пикселей на изображении  
for (int i = 0; i < bmp.Width; i++)
for (int j = 0; j < bmp.Height; j++)
{
// Извлекаем в R значение красного цвета
int R = bmp.GetPixel(i, j).R;
// Извлекаем в G значение зеленого цвета
int G = bmp.GetPixel(i, j).G;
// Извлекаем в B значение синего цвета
int B = bmp.GetPixel(i, j).B;
// Высчитываем среднее арифметическое
int Gray = (R + G + B) / 3;
// Переводим число в значение цвета.
// 255 – показывает степень прозрачности.
// Остальные значения одинаковы
Color p = Color.FromArgb(255, Gray, Gray,
Gray);
// Записываем цвет в текущую точку
bmp.SetPixel(i, j, p);
}
// Вызываем функцию перерисовки окна
Refresh();
Практически надо поставить соответствие [0..255] уровни серого индексу выбранной палитры в 3х каналах. В сети есть генератор палитр, н-р здесь
Роман Камаев
Роман Камаев
93 724
Лучший ответ
Вашим текущим алгоритмом это точно нельзя сделать.
int Gray = (R + G + B) / 3; - тут вы получите оттенок серго цвета
Color p = Color.FromArgb(255, Gray, Gray, Gray); - а тут вы заполняете RGB модель одним значением.
Как вы потом вернете это обратно? Как это можно высчитать вообще, учитывая что значение Gray может быть получено из различных комбинаций.
C@t@clizm T@iyfunoff
C@t@clizm T@iyfunoff
20 187
Владимир Стадниченко Скажу преподавателю, что видимо никак не получится это сделать. Просто странно, что вообще задают такое, если это невозможно...
И что тебе не нравится? Открывающихся кобок нет у первого цикла и закрывающихся скобок нет у этого же цикла перед обновлением...
**
******** ******
10 755
Владимир Стадниченко Этот алгоритм переводит фото в серые оттенки, а надо из серых получить цветное
это невозможнл
Чтобы перевести изображение из оттенков серого в цвет, можно создать цветовую палитру на основе значения оттенков серого для каждого пикселя изображения. Значение шкалы серого можно рассчитать как среднее значение красного, зеленого и синего цветов для каждого пикселя. Затем каждое значение шкалы серого можно сопоставить с соответствующим цветом в цветовой палитре.

Вот реализация алгоритма на языке C# с использованием предоставленного кода:
 private void TranslateToColor(Bitmap bmp) 
{
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
int R = bmp.GetPixel(i, j).R;
int G = bmp.GetPixel(i, j).G;
int B = bmp.GetPixel(i, j).B;
int gray = (R + G + B) / 3;

// Create the color palette based on the grayscale value
Color color;
if (gray >= 0 && gray < 85)
color = Color.FromArgb(255, 0, 0, gray * 3);
else if (gray >= 85 && gray < 170)
color = Color.FromArgb(255, 0, (gray - 85) * 3, 255);
else
color = Color.FromArgb(255, (gray - 170) * 3, 255, 255);

bmp.SetPixel(i, j, color);
}
}

Refresh();
}
Этот алгоритм отображает значения серого цвета в цветовую палитру, которая варьируется от красного до зеленого и синего. Вы можете настроить цветовую палитру по своему усмотрению, чтобы добиться желаемого эффекта.
Марат Разяпов Вот еще один вариант перевода изображения из полутонов в цвет:
 private void TranslateToColor(Bitmap bmp) 
{
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
int R = bmp.GetPixel(i, j).R;
int G = bmp.GetPixel(i, j).G;
int B = bmp.GetPixel(i, j).B;
int gray = (R + G + B) / 3;

// Create the color palette based on the grayscale value
Color color = Color.FromArgb(255, gray, gray * 2, 255 - gray);

bmp.SetPixel(i, j, color);
}
}

Refresh();
}
Точные цвета будут зависеть от значений, присвоенных красным, зеленым и синим компонентам каждого пикселя.
Марат Разяпов
 Вариант 1: Значения шкалы серого в цветовую палитру, которая варьируется от красного до зеленого и синего. Этот вариант может быть лучшим, если вы хотите подчеркнуть яркие и темные области изображения и создать высококонтрастный эффект. 

Вариант 2: Значения шкалы серого в цветовую палитру, которая варьируется от синего до зеленого и красного. Этот вариант может быть лучшим, если вы хотите создать более естественный и гармоничный цветовой переход в изображении.

Вариант 3: Значения шкалы серого отображаются в палитре цветов от синего до зеленого. Этот вариант может быть лучшим, если вы хотите создать прохладный, успокаивающий и безмятежный эффект на изображении.