Перевод температуры в RGB - C#

Узнай цену своей работы

Формулировка задачи:

Поскольку прога пишется на C# то решил написать в этом разделе. Задание такое: Есть целочисленная матрица со значениями от -500 до + 500 (к примеру). Необходимо в зависимости от значения числа закрасить ячейку таблицы нужным цветом. То есть например -500, поскольку эта самая холодная температура в матрице, то ячейка должна быть закрашена тёмно-синим цветом, а при +500 тёмно-красным цветом. Необходим алгоритм для перевода темепературы, заданной в числах, в в цвет RGB, безусловно если такой существует. Или придётся самому алгоритм выдумывать???

Решение задачи: «Перевод температуры в RGB»

textual
Листинг программы
public static Color ColorFromAhsb(int a, float h, float s, float b) {
 
  if (0 > a || 255 < a) {
    throw new ArgumentOutOfRangeException("a", a, 
      Properties.Resources.InvalidAlpha);
  }
  if (0f > h || 360f < h) {
    throw new ArgumentOutOfRangeException("h", h, 
      Properties.Resources.InvalidHue);
  }
  if (0f > s || 1f < s) {
    throw new ArgumentOutOfRangeException("s", s, 
      Properties.Resources.InvalidSaturation);
  }
  if (0f > b || 1f < b) {
    throw new ArgumentOutOfRangeException("b", b, 
      Properties.Resources.InvalidBrightness);
  }
 
  if (0 == s) {
    return Color.FromArgb(a, Convert.ToInt32(b * 255), 
      Convert.ToInt32(b * 255), Convert.ToInt32(b * 255));
  }
 
  float fMax, fMid, fMin;
  int iSextant, iMax, iMid, iMin;
 
  if (0.5 < b) {
    fMax = b - (b * s) + s;
    fMin = b + (b * s) - s;
  } else {
    fMax = b + (b * s);
    fMin = b - (b * s);
  }
 
  iSextant = (int)Math.Floor(h / 60f);
  if (300f <= h) {
    h -= 360f;
  }
  h /= 60f;
  h -= 2f * (float)Math.Floor(((iSextant + 1f) % 6f) / 2f);
  if (0 == iSextant % 2) {
    fMid = h * (fMax - fMin) + fMin;
  } else {
    fMid = fMin - h * (fMax - fMin);
  }
      
  iMax = Convert.ToInt32(fMax * 255);
  iMid = Convert.ToInt32(fMid * 255);
  iMin = Convert.ToInt32(fMin * 255);
 
  switch (iSextant) {
    case 1:
      return Color.FromArgb(a, iMid, iMax, iMin);
    case 2:
      return Color.FromArgb(a, iMin, iMax, iMid);
    case 3:
      return Color.FromArgb(a, iMin, iMid, iMax);
    case 4:
      return Color.FromArgb(a, iMid, iMin, iMax);
    case 5:
      return Color.FromArgb(a, iMax, iMin, iMid);
    default:
      return Color.FromArgb(a, iMax, iMid, iMin);
  }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4 из 5