преобразование значений RGB в System.Drawing

Я осмотрелся, но не вижу этого вопроса - может быть, это слишком просто, но у меня его нет.

Если у меня есть файл, содержащий значения цвета, например:

255, 65535, 65280 (думаю это зеленый)

есть ли способ:

  1. преобразовать их в тип System.Drawing.Color или.... еще лучше..
  2. принять ли .NET их как представление цвета?

Благодарность,


person Chris    schedule 13.01.2010    source источник


Ответы (2)


Из ваших комментариев к более ранней версии этого ответа кажется, что каждое число в файле представляет один цвет и что это упакованные байты:

65280 (= 0xFF00) -> (0, 255, 0)
65535 (= 0xFFFF) -> (255, 255, 0)

Итак, вам нужен младший байт в первой (красной?) части тройки и следующий старший байт во второй (синей?) части тройки. Я предполагаю, что значения больше 65535 войдут в третий байт тройки.

Вы можете легко сделать это, используя битовую маску и операторы битового сдвига:

int r = n && 0xFF;
int g = (n >> 8) & 0xFF;
int b = (n >> 16) & 0xFF;

то есть сдвигать его вправо на 8 бит каждый раз и выбирать нижние 8 бит.

ПРИМЕЧАНИЕ. Вы также можете сделать это напрямую, используя Color.FromArgb(Int32), что избавляет вас от необходимости распаковывать. Но это будет работать только в том случае, если числа в вашем файле упакованы правильным образом. Они должны быть в формате AARRGGBB. Например, 255 (0x000000FF) = синий, 65280 (0x0000FF00) = зеленый, 16711680 (0x00FF0000) = красный. Я не уверен, что ваши числа в правильном порядке, поэтому я рассмотрел явную технику распаковки.

person itowlson    schedule 13.01.2010
comment
Извините, я не хотел сказать, что строка с разделителями-запятыми была моим цветом, а скорее: есть ли способ превратить 65535 в последовательность rgb. Или 65280 в последовательность rgb. Есть ли способ превратить число вроде 65535 в (0, 255, 0) или что-то близкое. спасибо. - person Chris; 14.01.2010
comment
Я имею в виду превращение 65820 в (0,255,0). 65535 будет преобразовано в (255,255,0). Я спрашиваю об этом, потому что хочу перейти от числа вроде 65535 к типу System.Drawing.Color. И если я смогу перейти с 65535 на (255,255,0), то я смогу взять это оттуда;) спасибо - person Chris; 14.01.2010
comment
Я обновил свой ответ, чтобы описать, как извлечь байтовые значения из числовых значений. - person itowlson; 14.01.2010

Вот как вы используете тип цвета:

dim someColor as Color = color.FromArgb(red, green, blue)
  • Обязательно используйте Imports System.Drawing
  • Измените красный, зеленый и синий цвета на их соответствующие значения RGB (т.е.: 0-255)
person Dostee    schedule 13.01.2010