Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: houselab.narod.ru
 Профиль | | #3
Добавлено: 21.07.06 04:10
как с этим бороться?

Private Function BigString(SmallString As String) As String
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-сайт: bit.pirit.info
 Профиль | | #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

Но это можно сделать и без вычислений.
Дело в том что цвет состоит из трех последовательно стоящих байтов, которые вместе представляют собой длинное целое число.
Так почему бы это число напрямую не разделить на байты:

 
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(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(a), 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
возвращает просто "0" вместо "000000" или просто "FF" для красного вместо "FF0000".
во-первых, возвращается для чёрного 0, а не "0", а для красного 255, а не "FF". Перевод числа в HEX и изменение представления строки (т.е. из "FF" сделать "FF0000";) - забота твоя.

Ответить

Номер ответа: 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
Вапщета тема про обратное

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам