Четверг, 14 Ноября 2024, 21:26

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Преобразование из HEX/10чного кода цвета в rgb цвет
pixeyeДата: Четверг, 21 Июня 2012, 15:07 | Сообщение # 1
Red Winter Software
Сейчас нет на сайте
Столкнулся с такой проблемой, что мне надо было загружать значение цвета из файла.
Значение выглядело примерно так : _colObj="9221330" . Впринципе мой ответ был найден на просторах Юнити однако как часто бывает в таких случаях допилить ручками пришлось;-)
Выкладываю свой вариант...возможно есть способы сделать это проще.

Code


public static class HEXconverter{  
public static int HexToInt (char hexChar){  
string hex = ""+hexChar;
switch(hex){  
   case "0":
    return 0;
   case "1":
    return 1;
   case "2":
    return 2;
   case "3":
    return 3;
   case "4":
    return 4;
   case "5":
    return 5;
   case "6":
    return 6;
   case "7":
    return 7;
   case "8":
    return 8;
   case "9":
    return 9;
   case "A":
    return 10;
   case "B":
    return 11;
   case "C":
    return 12;
   case "D":
    return 13;
   case "E":
    return 14;
   case "F":
    return 15;
}
return 0;
}
  public static Color HexToRGB (int _val){  
         float red = 0f;
  float green = 0f;
  float blue = 0f;
  string _color = _val.ToString("X");
  if (_color.Length == 2) {  
    _color = "0000" + _color;
   }
  else  
  if (_color.Length==4){  
  _color = "00"+ _color;
  }  

   red =(HexToInt(_color[5])+HexToInt(_color[4])*16.000f)/255;
   green = (HexToInt (_color [3]) + HexToInt (_color [2]) * 16.000f) / 255;
   blue = (HexToInt (_color [1]) + HexToInt (_color [0]) * 16.000f) / 255;
   
     
     Color finalColor = new Color(red,green,blue,1);  
  return finalColor;
   
  }
}



10чный цвет кода представляет собой 256x256x256 цветов . Мы переводим в hex формат наше значение
string _color = _val.ToString("X");
И добавляем несколько нулей если это необходимо чтобы у нас было значение например 00008B, а не просто 8B, нам это потребуется чтобы потом грамотно вытащить цвет.

Дальше просто смотрим на значение каждого символа в _color, заменяя его нужным числовым значением и проводим расчеты для каждого из 3 цветов.
Сохраняем значения в цвет формата rgb и отправляем в наш код;-)

Класс статичный и можно обратиться примерно так:
Color _color = HEXconverter.HexToRGB(11075499); // получим салатовый цвет;-)


ACTORS - мой фреймворк на Unity
Until We Die - игра над которой работаю

andarkyДата: Четверг, 21 Июня 2012, 15:17 | Сообщение # 2
старожил
Сейчас нет на сайте
я на днях такую же проблему решал в FLASH (ActionScript2)
Но там проще все получилось.
15-20 строк кода и всё...



Моя страничка по дизайну
GameDev//Design//3D
Ютубчик
LertmindДата: Четверг, 14 Августа 2014, 21:17 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Можно записать короче, логика будет почти такой же, но главное не будет индусского кода со switch. И ваш код неправильно работает, при цветах, где нужно нечётное количество нулей (например, если передать 15). Сейчас внизу юнити комьюнити появился нормальный код.
Именно для вашего расположения цветов можно так было сделать:
Код
public static class HexConverter {
    public static int HexToInt (string hex) {
     return int.Parse(hex.ToString(), System.Globalization.NumberStyles.HexNumber);
    }

    public static Color HexToColor (int val){
     string sVal = val.ToString("X6");

     float r = HexToInt(sVal.Substring(4, 2)) / 255f;
     float g = HexToInt(sVal.Substring(2, 2)) / 255f;
     float b = HexToInt(sVal.Substring(0, 2)) / 255f;
        
     return new Color(r, g, b, 1f);
    }
}


Сообщение отредактировал Lertmind - Четверг, 14 Августа 2014, 21:24
StivДата: Суббота, 12 Сентября 2015, 08:25 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Я правильно понимаю, здесь тема на создание гексагональной карты? Если да то можно поделиться инфой, а то пытаюсь за пилить что то под тип Героев, а локация получается из квадратов, хотя префабы разнообразных гексов есть.. подскажите правильное построение таких карт, заранее благодарен ответ!!!
TymonrДата: Суббота, 12 Сентября 2015, 10:35 | Сообщение # 5
With OpenSource forever
Сейчас нет на сайте
Цитата Stiv ()
Я правильно понимаю, здесь тема на создание гексагональной карты?

Нет, не правильно


Если вы решили обратиться к нам за помощью, не становитесь в позицию неудачника. И не ведите себя как неудачник. Лучший способ получить быстрый и чуткий ответ, - спрашивать как победитель — спрашивать как человек умный, уверенный в себе и знающий, которому просто понадобилась помощь при решении одной конкретной проблемы.
Как правильно задавать вопросы в технических форумах
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг