// Циклы для перебора всех пикселей на изображении
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();
C#
С# Разработайте и реализуйте собственный алгоритм, переводящий изображение в градациях серого цвета в цвет.
Градация задаётся кодом ниже.
Практически надо поставить соответствие [0..255] уровни серого индексу выбранной палитры в 3х каналах. В сети есть генератор палитр, н-р здесь
Вашим текущим алгоритмом это точно нельзя сделать.
int Gray = (R + G + B) / 3; - тут вы получите оттенок серго цвета
Color p = Color.FromArgb(255, Gray, Gray, Gray); - а тут вы заполняете RGB модель одним значением.
Как вы потом вернете это обратно? Как это можно высчитать вообще, учитывая что значение Gray может быть получено из различных комбинаций.
int Gray = (R + G + B) / 3; - тут вы получите оттенок серго цвета
Color p = Color.FromArgb(255, Gray, Gray, Gray); - а тут вы заполняете RGB модель одним значением.
Как вы потом вернете это обратно? Как это можно высчитать вообще, учитывая что значение Gray может быть получено из различных комбинаций.
Владимир Стадниченко
Скажу преподавателю, что видимо никак не получится это сделать. Просто странно, что вообще задают такое, если это невозможно...
И что тебе не нравится? Открывающихся кобок нет у первого цикла и закрывающихся скобок нет у этого же цикла перед обновлением...
Владимир Стадниченко
Этот алгоритм переводит фото в серые оттенки, а надо из серых получить цветное
это невозможнл
Чтобы перевести изображение из оттенков серого в цвет, можно создать цветовую палитру на основе значения оттенков серого для каждого пикселя изображения. Значение шкалы серого можно рассчитать как среднее значение красного, зеленого и синего цветов для каждого пикселя. Затем каждое значение шкалы серого можно сопоставить с соответствующим цветом в цветовой палитре.
Вот реализация алгоритма на языке C# с использованием предоставленного кода:
Вот реализация алгоритма на языке 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: Значения шкалы серого отображаются в палитре цветов от синего до зеленого. Этот вариант может быть лучшим, если вы хотите создать прохладный, успокаивающий и безмятежный эффект на изображении.
Похожие вопросы
- На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом
- Составление алгоритма и программы вычисления
- Алгоритм для игры на c#
- Помогите пожалуйста написать две программы и составить к ним алгоритм. Ну никак уже не получается...
- У меня есть такая проблема, может кто подскажет как можно правильно на WPF MVVM реализовать тестовую систему
- Как реализовать данный метод?
- Сколько времени займет на С# выполнение этого алгоритма сортировки массива?
- А серый цвет - это белый но пониженной яркости? Существует ли абсолютно белый цвет, или всегда есть цвет еще белее?
- Почему немцам нравился серый цвет?
- Какого цвета выбрать обои в комнату, если ламинат серого цвета (не светлый) с фактурой дерева и стенка беленый дуб