Конференція vbstreets - перегляд теми - розкладання кольору на r, g, b

Воно здається просто змінна складається з Трез байтів. Які відповідно і пам'ятають кожен колір. Розкласти можна зміщенням байтів, або просто мат. операціями.
Де який колір будеш розбиратися сам.
Я тільки обьясню як вичленувати всі три.

Ділимо число на 65536 (здається) без остачі природно. І отримуємо перший байт з першим кольором.

Тепер множимо отримане число на 65536 і віднімаємо з даного числа. Отримане число (це два залишилися байта) ділимо на 256 (без остачі) і отримуємо другий байт.

З того числа яке означає два останніх байта віднімаємо другий бай помножений на 256. отримуємо третій байт.

Код: Виділити все 'rgb as long шуканий колір
r = rgb / 65536
g = # 40; rgb-r * 65536 # 41; / 256
b = # 40; rgb-r * 65536 # 41; -g * 256

Я давно не пишу на VB так що можуть бути помилки, в коді "/" це цілочисельне ділення. Так що як і що нехай поправлять профі, а опщая суть така.

Всім хто відповів - спасибі.

GAGArin. красивіше і швидше використовувати маску, cGreen = (cColor And h00ff00) / 256

Lasciate ogni speranza, voi ch'entrate.

alibek писал (а): GAGArin. красивіше і швидше використовувати маску, cGreen = (cColor And h00ff00) / 256


Alibek, а покажи, плиз, свій код для ражложенія на кольори з використанням маски.
Дякуємо.

Я все це до чого питаю?
Мені хочеться в richtextbox'е зробити інверсію вибраної ділянки тексту. Якщо є більш легкий спосіб зробити колір інверсним в контролі (без перетворення в RGB і назад), то буду радий дізнатися про це.

tyomitch писал (а): До речі, найпростіший спосіб інвертувати колір Color - це Color Xor vbWhite. Без усяких масок і т.п.

Ruslan Demidow писал (а):

tyomitch писал (а): До речі, найпростіший спосіб інвертувати колір Color - це Color Xor vbWhite. Без усяких масок і т.п.


А якщо користувач у мене може змінювати в установках за умовчанням не тільки колір шрифту тексту, а й фон для richtextedit'а?
Тобто наприклад якщо фон білий, колір шрифту чорний - то піде.


Дик, тади разом з кольором тексту, і колір фону інвертуйте.
А якщо у тебе окремо мона колір фону і колір тексту міняти, то вже вибачте, якщо твій юзверя додумається чорний шрифт на білий поміняти при білому кольорі фону - це його проблемма, а не твоя. ;-)

А ось розкласти колір на складові, можна і так (до речі це найбільш швидкий спосіб):
Код: Виділити все 'Створи проект без форм з одним модулем. І вставши в нього цей код.

Public Type RGBColors
rgbRed As Byte
rgbGreen As Byte
rgbBlue As Byte
rgbReserved As Byte
End Type

Public Sub Main # 40; # 41;
Dim lngColor As OLE_COLOR
Dim udtRGB As RGBColors

lngColor = VBA.RGB # 40; 188, 81, 204 # 41;

'В Immediate буде це: "188 | 81 | 204"
Debug.Print udtRGB.rgbRed; "|"; udtRGB.rgbGreen; "|"; udtRGB.rgbBlue
End Sub

Ruslan Demidow писал (а):

tyomitch писал (а): До речі, найпростіший спосіб інвертувати колір Color - це Color Xor vbWhite. Без усяких масок і т.п.


А якщо користувач у мене може змінювати в установках за умовчанням не тільки колір шрифту тексту, а й фон для richtextedit'а?
Тобто наприклад якщо фон білий, колір шрифту чорний - то піде.


Дик, тади разом з кольором тексту, і колір фону інвертуйте.


Власне, по-моєму так спочатку завдання і ставилося: проинвертировать весь регіон тексту, тобто і шрифт, і фон.

TEH3OP писал (а): А ось розкласти колір на складові, можна і так (до речі це найбільш швидкий спосіб):
Код: Виділити все 'Створи проект без форм з одним модулем. І вставши в нього цей код.

Public Type RGBColors
rgbRed As Byte
rgbGreen As Byte
rgbBlue As Byte
rgbReserved As Byte
End Type

Public Sub Main # 40; # 41;
Dim lngColor As OLE_COLOR
Dim udtRGB As RGBColors

lngColor = VBA.RGB # 40; 188, 81, 204 # 41;

'В Immediate буде це: "188 | 81 | 204"
Debug.Print udtRGB.rgbRed; "|"; udtRGB.rgbGreen; "|"; udtRGB.rgbBlue
End Sub

Колір фону можна задати тільки загальний, не для окремого слова, а мені потрібно окремого. Але я вже вирішив цю задачу за допомогою tyomitch'а, за що йому ще раз спасибі.