Выберите прозрачный цвет

У меня есть a Color, и у меня есть метод, который должен возвратить более "прозрачную" версию того цвета. Я попробовал следующий метод:

public static Color SetTransparency(int A, Color color)
{
   return Color.FromArgb(A, color.R, color.G, color.B);
}

но по некоторым причинам, независимо от того, что A возвращенный Colorуровень прозрачности просто не изменится.

Какая-либо идея?

5
задан Graviton 11 June 2010 в 08:02
поделиться

2 ответа

Мне кажется это нормально, за исключением того, что вы используете 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) .

13
ответ дан 18 December 2019 в 09:05
поделиться

Возможно, возникла проблема с вашим именем. Я сделал стандартный проект 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);
}
0
ответ дан 18 December 2019 в 09:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: