Генерация картинок рандомно - C#
Формулировка задачи:
Передо мной стоит задача - разработать тест по методике Ландольта. Суть его в том, чтобы находить разрывы в кольцах(всего разрывов 8 - на 1, 3, 5, 6, 7, 9, 10, 12 часов, картинки прикреплены). Соответственно, каждое кольцо с разрывом - отдельная картинка. По заданию нужно чтобы они генерировались случайным образом, и в большом количестве. Кто подскажет, как это осуществить? Буду очень признателен.
P.S.
Еще бонусом - кто знает, как сделать так, чтобы по нажатию на картинку она меняла свое состояние(т.е.из неактивного переходила в активное).
Решение задачи: «Генерация картинок рандомно»
textual
Листинг программы
public class LandoltRings
{
/// <summary>
/// Метод генерирует кольцо с разрывом. Разрыв расположен случайным образом в одном из 8 возможных положений
/// </summary>
public static Bitmap GetRandomRing()
{
var rnd = new Random(DateTime.Now.Millisecond);
var type = (LandoltRingEnum)rnd.Next(7);
RingEnum = type;
return CreateRing(type);
}
/// <summary>
/// Ширина зазора в градусах
/// </summary>
const float GAP = 30;
public static LandoltRingEnum RingEnum { get; set; }
private static Bitmap CreateRing(LandoltRingEnum ringEnum)
{
float angle;
switch (ringEnum)
{
case LandoltRingEnum.Ring1:
angle = 30;
break;
case LandoltRingEnum.Ring5:
angle = 150;
break;
case LandoltRingEnum.Ring6:
angle = 180;
break;
case LandoltRingEnum.Ring7:
angle = 210;
break;
case LandoltRingEnum.Ring9:
angle = 270;
break;
case LandoltRingEnum.Ring10:
angle = 300;
break;
case LandoltRingEnum.Ring12:
angle = 360;
break;
default:
throw new ArgumentOutOfRangeException(nameof(ringEnum), ringEnum, null);
}
angle -= 90;
var result = new Bitmap(100, 100);
using (var g = Graphics.FromImage(result))
{
using (var pen = new Pen(Color.Black, 10))
{
var rect = new RectangleF(0, 0, result.Width, result.Height);
rect.Inflate(new SizeF(-pen.Width / 2, -pen.Width / 2));
g.DrawArc(pen, rect, angle + GAP / 2, 360 - GAP);
}
}
return result;
}
}
public enum LandoltRingEnum
{
Ring1,
Ring5,
Ring6,
Ring7,
Ring9,
Ring10,
Ring12
}