преобразование значений RGB в System.Drawing - PullRequest
0 голосов
/ 14 января 2010

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

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

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

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

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

спасибо,

Ответы [ 2 ]

2 голосов
/ 14 января 2010

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

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

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

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) = красный.Я не уверен, что ваши номера в правильном порядке, поэтому я рассмотрел явную методику распаковки.

...