Установить прозрачный цвет - PullRequest
5 голосов
/ 11 июня 2010

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

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

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

Есть идеи?

Ответы [ 3 ]

12 голосов
/ 11 июня 2010

Ну, это выглядит нормально для меня, за исключением того, что вы используете Color.R (и т. Д.) Вместо color.R - вы уверены, что фактически используете возвращенный Color вместо того, чтобы предполагать, что он изменит существующий цвет? Как вы определяете, что «уровень прозрачности» не изменится?

Вот пример, показывающий, что значение альфа действительно верно в возвращенном цвете:

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).

4 голосов
/ 19 февраля 2014

Просто используйте правильную перегрузку FromArgb

var color = Color.FromArgb(50, Color.Red);
0 голосов
/ 11 июня 2010

Возможно, проблема с именами.Я сделал стандартный проект Windows Forms с 2 кнопками и добавил некоторый код, при нажатии кнопок их соответствующие цвета фактически исчезают.

И я согласен с Джоном Скитом, вы реализуете дублирующий метод, такжеИмена параметров должны начинаться со строчной буквы, поэтому «а» вместо «А»

код:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...