Рейтинг:
56
BillWoodruff
Предполагая, что вы хотите случайный выбор из известных цветов в системе.Рисование:
private List<knowncolor> colorList;
private Random rand;
private int maxColorIndex;
private KnownColor getRandomColor()
{
return colorList[rand.Next(0, maxColorIndex)];
}
private TestRandomKnownColor()
{
// conversion from IEnumerable necessary to use indexing
// this list will include all Colors including OS system colors
colorList = Enum.GetValues(typeof(KnownColor))
.Cast<knowncolor>()
.ToList();
// if you want only the Microsoft named colors, like 'AliceBlue
// and not the colors defined by the OS theme, like 'ActiveBorder
// use this to build the list
//colorList = Enum.GetValues(typeof(KnownColor))
//.Cast<KnownColor>()
//.Where(clr => ! (Color.FromKnownColor(clr).IsSystemColor))
//.ToList();
rand = new Random(DateTime.Now.Ticks.GetHashCode());
maxColorIndex = colorList.Count();
for (int i = 0; i < 10; i++)
{
KnownColor randColor = getRandomColor();
Console.WriteLine(randColor);
}
}
CPallini
Не знаю, почему кто-то понизил голос вашего решения, оно выглядит хорошим куском кода. У меня 5.
Thomas Daniels
Хороший ответ, +5!
Рейтинг:
2
Sergey Alexandrovich Kryukov
"Случайный цвет" не следует понимать как "случайные цвета, взятые из некоторого набора", например именованные цвета.
Этот совет был бы хорош, если бы он был только дополнением к коду, генерирующему случайные значения цвета, как предполагает решение 2.
—СА
BillWoodruff
В этом случае OP специально хочет, чтобы цвета были взяты из набора цветов в системе.Рисование.Цвет :)
Sergey Alexandrovich Kryukov
Нет, может быть, вы неправильно поняли этот тип. Это набор цветов, все 256x256x256x256 (ARGB). Не путайте его с такими типами, как System.Рисование.Цвета, Система.Рисование.Система.Цвета, каждый из которых представляет подмножество значений цвета, представленных системой.Рисование.Цвет. Видите разницу? :-)
—СА
BillWoodruff
Вы абсолютно правы, Сергей, использование ОП "цвет" (единственное число) не оправдывает моего предположения, что подразумевалось только известное содержание перечисления цветов ! Хороший улов.
Sergey Alexandrovich Kryukov
:-)
Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)
Вы правы. Не беспокойтесь. Все решения здесь. Пусть ОП решает, чего он хочет. Спасибо, что предупредил меня, как всегда. :)
Sergey Alexandrovich Kryukov
Именно так. Все решения представлены сейчас, и это главное здесь.
Спасибо за понимание.
—СА
Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)
:)
Рейтинг:
2
Afzaal Ahmad Zeeshan
Идея состоит в том, чтобы передать случайные значения самому цветовому объекту. Ниже приведена документация для класса Random.
http://msdn.microsoft.com/en-us/library/system.random(v=против 110).aspx[^]
Вы можете создавать свои собственные случайные числа, а затем передавать их в качестве значений красного, зеленого и синего цветов в объекте Color.
Поскольку мы будем работать в диапазоне от 0 до 255, то вы будете использовать это свойство для случайного объекта, Next(int, int)
.
// create new instance
Random rand = new Random();
// would return between 0 - 255
int randomNumber = rand.Next(0, 255);
Теперь вы можете получить эти значения в трех различных переменных. Затем передайте их в качестве значений цветовому объекту. Подобный этому
// include namespaces
using System;
using System.Drawing;
// create new instance
Color color = new Color();
// set the values of RED, GREEN and BLUE
color.R = randRed;
color.G = randGreen;
color.B = randBlue;
// use the color here in the code
// as a Color object of System.Drawing namespace.
Cesar Bretana Gonzalez
Ну, спасибо всем за вашу помощь, все вы действительно помогаете мне, люди, еще раз спасибо...
Рейтинг:
1
CPallini
Простой способ получения непрозрачного цвета
Random rand = new Random();
int r = rand.Next(256);
int g = rand.Next(256);
int b = rand.Next(256);
Color col = Color.fromArgb(r,g,b);
Sergey Alexandrovich Kryukov
Тот же комментарий, что и мой комментарий к решению 2.
Некоторые два члена проголосовали за 2, вероятно, потому, что ваше решение повторяет уже имеющееся решение. Но я знаю, что вы не стали бы специально копировать чужое решение; скорее всего, это было совпадение, и пост перекрывался во времени; поэтому я проголосовал за свою 4-ю.
—СА
CPallini
:-) Я просто копирую себя. Спасибо.
Рейтинг:
1
Jan_Tamis
самый лучший и эффективный способ сделать это-это:
Random rng = new Random();
Color.FromArgb(rng.next(-16777216, 0);
это вернет случайный цвет с 255 в качестве альфа - значения;
Richard MacCutchan
Опоздал больше чем на три года. Пожалуйста, не воскрешайте старые ответы, особенно те, которые уже имеют решения.
Jan_Tamis
Ну, я нахожу ость неэффективной, поэтому я подумал, что опубликую лучшее решение.
Richard MacCutchan
Ваш ответ не лучше, на самом деле это довольно плохое предложение.
Jan_Tamis
Можете ли вы тогда сказать мне, почему это не лучший оунсер?
Рейтинг:
0
Thomas Daniels
Поскольку цвет имеет данные RGB и все значения (красный, зеленый и синий) являются целыми числами от 0 до 255 (включая 0 и 255), вы можете использовать Random
класс для генерации трех целых чисел от 0 до 255.
Random rand = new Random();
int max = byte.MaxValue + 1; // 256
int r = rand.Next(max);
int g = rand.Next(max);
int b = rand.Next(max);
Color c = Color.FromArgb(r, g, b);
rand.Next(max);
возвращает целое число от 0 до 255, но мы передаем
max
(= 256) в качестве аргумента, поскольку аргумент
rand.Next
это исключительная верхняя граница, поэтому, если мы используем здесь 256, она будет включать 255, но не 256.
Более подробная информация о компании
Random.Next
:
http://msdn.microsoft.com/en-us/library/System-да.Случайные.Далее.aspx-файл[
^]
Sergey Alexandrovich Kryukov
Используя любой непосредственные константы например, 256-это неприемлемо. Всегда лучше ввести явную константу (если не член, возможно, только для чтения или переменную).
В этом случае заменить "255" на "byte.MaxValue + 1
".
Поэтому я проголосовал за него своими 4 голосами. :-)
—СА
Thomas Daniels
Спасибо за ваш комментарий! Я отредактировал свой ответ.
CPallini
Почему непосредственная константа-это мерзость?
Sergey Alexandrovich Kryukov
Я думал, что это должно быть очевидно для вас. Что делать, если вам нужно изменить его? Что, меняя его в 3 или более местах?
И в этом случае изменение вполне возможно. Возможно, потребуется ограничить диапазон цветов, код может потребоваться принять 16-битные цвета и так далее...
—СА
CPallini
Да, это действительно так. Это был просто глупый вопрос.
CPallini
Действительно не знаю, почему кто-то его понизил, так как он очень похож на идеальное решение (мое: - D ).
Серьезно, возьми мою пятерку.
Thomas Daniels
Спасибо! Я еще не видел вашего ответа (но теперь увидел), и я не понимаю, почему кто-то понизил ваш голос, так что вы тоже получили мои 5.