Что оно делает:
- Позволяет пользователю выбирать 5 цветов на цветовой панели
- Находит яркость каждого отдельного пикселя
- Замените пиксель на один из выбранных цветов в зависимости от диапазонов яркости
Код: Выделить всё
private void fiveColorsToolStripMenuItem_Click(object sender, EventArgs e)
{
Color currentPixel;
int brightness;
Bitmap sourceBitmap = btm.Bitmapa;
Bitmap resultBitmap = new Bitmap(sourceBitmap);
Color chosenColor = colorDialog.Color;
Color[] colorArray = new Color[5]; // array with five colors
for (int index = 0; index < 5; index++)
{
if (colorDialog.ShowDialog() == DialogResult.OK)
{
colorArray[index] = colorDialog.Color;
}
}
for (int x = 0; x < sourceBitmap.Width; x++)
{
for (int y = 0; y < sourceBitmap.Height; y++)
{
currentPixel = sourceBitmap.GetPixel(x, y);
brightness = btm.brightness(currentPixel);
Color newColor = new Color();
if (brightness < 50)
{
newColor = Color.FromArgb(Convert.ToInt32(colorArray[4].R), Convert.ToInt32(colorArray[4].G), Convert.ToInt32(colorArray[4].B));
}
else if (brightness >= 50 && brightness < 100)
{
newColor = Color.FromArgb(Convert.ToInt32(colorArray[3].R), Convert.ToInt32(colorArray[3].G), Convert.ToInt32(colorArray[3].B));
}
else if (brightness >= 100 && brightness < 150)
{
newColor = Color.FromArgb(Convert.ToInt32(colorArray[2].R), Convert.ToInt32(colorArray[2].G), Convert.ToInt32(colorArray[2].B));
}
else if (brightness >= 150 && brightness < 200)
{
newColor = Color.FromArgb(Convert.ToInt32(colorArray[1].R), Convert.ToInt32(colorArray[1].G), Convert.ToInt32(colorArray[1].B));
}
else if (brightness >= 200)
{
newColor = Color.FromArgb(colorArray[0].R, colorArray[0].G, colorArray[0].B);
}
resultBitmap.SetPixel(x, y, newColor);
}
}
btm.Bitmapa = resultBitmap; //Bitmapa is an atribute
btm.zobrazitBitovouMapu(new Point(0, 0), Form.ActiveForm);
}
- Есть ли лучший способ выполнить часть if/else if? Кажется, что для выполнения этой задачи требуется много кода.
- Оптимально ли использовать Get/SetPixel или мне следует использовать что-то получше?