Страница: 1 |
Страница: 1 |
Вопрос: Коды цветов
Добавлено: 21.07.06 00:26
Автор вопроса: SnowWolf | ICQ: 164216596
Вот возник такой вопрос:
используя функцию Hex пытаюсь перевести цвет, переданный из CommonDialog'а. Но проблема, некоторым цветам оно отдаёт код не полностью (обрезает нули видать). Т.е. например для чёрного цвета Hex возвращает просто "0" вместо "000000" или просто "FF" для красного вместо "FF0000".
Собственно вопрос: как с этим бороться?
И ещё: как перевести это в RGB?
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #1
Добавлено: 21.07.06 00:56
в поиск...
Номер ответа: 2
Автор ответа:
SnowWolf
ICQ: 164216596
Вопросов: 8
Ответов: 10
Профиль | | #2
Добавлено: 21.07.06 01:00
по форуму? А оно у меня не пашет, таймуатом ругается
Номер ответа: 3
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #3
Добавлено: 21.07.06 04:10
BigString = SmallString + Mid("000000", 1, 6 - Len(SmallString))
End Function
Private Sub Form_Load()
Dim retval As String
retval = BigString("FF"
End Sub
Номер ответа: 4
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #4
Добавлено: 21.07.06 05:29
Цвет кодируется следующим образом:
red + 256*green + 65536*blue
Разложить цвет на составляющие можно следующим образом:
Red = Color And 255
Green = Color \ 256 And 255
Blue = Color \ 65536 And 255
Но это можно сделать и без вычислений.
Дело в том что цвет состоит из трех последовательно стоящих байтов, которые вместе представляют собой длинное целое число.
Так почему бы это число напрямую не разделить на байты:
(pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Private Type RGBType
red As Byte
green As Byte
blue As Byte
End Type
Private Sub Command1_Click()
Dim ColorRGB As RGBType
Dim a As Long
' Составляем цвет
a = RGB(20, 76, 32)
' Копируем переменную a в переменную ColorRGB
CopyMemory ByVal VarPtr(ColorRGB), ByVal VarPtr, 3
' Выводим результат
MsgBox ColorRGB.red
MsgBox ColorRGB.green
MsgBox ColorRGB.blue
End Sub
Номер ответа: 5
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #5
Добавлено: 21.07.06 14:26
Ну, можно то же и без АПИ
Option Explicit
Private Type RGBType
red As Byte
green As Byte
blue As Byte
End Type
Private Type LongColor
Color As Long
End Type
Private Sub Command1_Click()
Dim ColorRGB As RGBType
Dim a As LongColor
' Составляем цвет
a.Color = RGB(20, 76, 32)
' Копируем переменную a в переменную ColorRGB
LSet ColorRGB = a
' Выводим результат
MsgBox ColorRGB.red
MsgBox ColorRGB.green
MsgBox ColorRGB.blue
End Sub
Номер ответа: 6
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #6
Добавлено: 21.07.06 19:18
Номер ответа: 7
Автор ответа:
SnowWolf
ICQ: 164216596
Вопросов: 8
Ответов: 10
Профиль | | #7
Добавлено: 23.07.06 17:17
Всем спасибо, всё заработало
Номер ответа: 8
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #8
Добавлено: 25.07.06 12:58
из трох цвитоф можно просто RGB-шей получать колор
Номер ответа: 9
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #9
Добавлено: 25.07.06 13:41
Вапщета тема про обратное