У меня есть a Color
, и у меня есть метод, который должен возвратить более "прозрачную" версию того цвета. Я попробовал следующий метод:
public static Color SetTransparency(int A, Color color)
{
return Color.FromArgb(A, color.R, color.G, color.B);
}
но по некоторым причинам, независимо от того, что A
возвращенный Color
уровень прозрачности просто не изменится.
Какая-либо идея?
Мне кажется это нормально, за исключением того, что вы используете Color.R
(и т. Д.) Вместо color.R
- вы уверены, что действительно используете вернул Цвет
вместо того, чтобы предполагать, что он изменит существующий цвет? Как вы определяете, что «уровень прозрачности» не изменится?
Вот пример, показывающий, что альфа-значение действительно правильное в возвращаемом цвете:
using System;
using System.Drawing;
class Test
{
static Color SetTransparency(int A, Color color)
{
return Color.FromArgb(A, color.R, color.G, color.B);
}
static void Main()
{
Color halfTransparent = SetTransparency(127, Color.Black);
Console.WriteLine(halfTransparent.A); // Prints 127
}
}
Никаких сюрпризов. Было бы очень полезно, если бы вы предоставили короткую, но полную программу, которая точно демонстрирует вашу проблему. Вы уверены, что все, что вы делаете с цветом, даже поддерживает прозрачность ?
Обратите внимание, что этот метод уже существует как Color.FromArgb (int, Color)
.
Возможно, возникла проблема с вашим именем. Я сделал стандартный проект Windows Forms с двумя кнопками и добавил код, при нажатии на которые их соответствующие цвета действительно исчезают.
И я согласен с Джоном Скитом, вы реализуете дублированный метод, также все имена параметров должны начинаться со строчной буквы, поэтому «a» вместо «A»
код:
private void Form1_Load(object sender, EventArgs e)
{
button1.BackColor = Color.Red;
button2.BackColor = Color.Green;
}
private void button1_Click(object sender, EventArgs e)
{
Color c = button1.BackColor;
button1.BackColor = Color.FromArgb(Math.Max(c.A - 10, (byte)0), c.R, c.G, c.B);
}
private void button2_Click(object sender, EventArgs e)
{
Color c = button2.BackColor;
button2.BackColor = Color.FromArgb(Math.Max(c.A - 10, (byte)0), c.R, c.G, c.B);
}
public static Color SetTransparency(int a, Color color)
{
return Color.FromArgb(a, color.R, color.G, color.B);
}