Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут
закрыты.
Читайте
требования к создаваемым темам.
-
-=TsA=-
-
- Продвинутый пользователь
-
-
- Сообщения: 142
- Зарегистрирован: 21.09.2004 (Вт) 14:32
- Откуда: Татарстан, Заинск
-=TsA=- » 11.07.2007 (Ср) 7:24
Уважаемые, а есть какая нибудь функция для преобразования цвета (32bpp) в оттенки серого (32bpp)? Или хотя бы формула?
Сам делаю так:
- Код: Выделить всё
R = Int(C / 65536 / 3)
G = Int((C Mod 65536) / 256 / 3)
B = Int((C Mod 256) / 3)
C = R Or G Or B
C = RGB(С, С, С)
но не устраивает скорость.
ЗЫ. Чуть подправил
-
djalex777
-
- Постоялец
-
-
- Сообщения: 461
- Зарегистрирован: 23.03.2006 (Чт) 16:02
-
djalex777 » 11.07.2007 (Ср) 9:15
Оттенки серого тоже бывают разные
Стандартные получаются усреднением суммы всех компонент цвета. Вот пример кода:
- Код: Выделить всё
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Function GetGrayscaleColor(cl As Long) As Long
Dim b(0 To 3) As Byte, tmp_cl As Byte, get_cl As Long
CopyMemory ByVal VarPtr(b(0)), ByVal VarPtr(cl), 4
tmp_cl = CByte((CLng(b(0)) + CLng(b(1)) + CLng(b(2))) / 3)
b(0) = tmp_cl
b(1) = tmp_cl
b(2) = tmp_cl
CopyMemory ByVal VarPtr(get_cl), ByVal VarPtr(b(0)), 4
GetGrayscaleColor = get_cl
End Function
-
tyomitch
-
- Пользователь #1352
-
-
- Сообщения: 12822
- Зарегистрирован: 20.10.2002 (Вс) 17:02
- Откуда: חיפה
tyomitch » 11.07.2007 (Ср) 9:29
djalex777 писал(а):Оттенки серого тоже бывают разные
Стандартные получаются усреднением суммы всех компонент цвета.
Гон. Чисто-жёлтый светлее чисто-синего.
Правильный код:
http://bbs.vbstreets.ru/viewtopic.php?p=79704#79704
-
-=TsA=-
-
- Продвинутый пользователь
-
-
- Сообщения: 142
- Зарегистрирован: 21.09.2004 (Вт) 14:32
- Откуда: Татарстан, Заинск
-=TsA=- » 11.07.2007 (Ср) 9:51
Спасибо
-
HiSER
-
- Обычный пользователь
-
-
- Сообщения: 88
- Зарегистрирован: 04.07.2007 (Ср) 18:17
HiSER » 11.07.2007 (Ср) 15:06
Мой вариант конвертации:
- Код: Выделить всё
Color = Fix(Color / &H10101) * &H10101
Попробовал на примере tyomitch'a, работает по быстрей.
-
tyomitch
-
- Пользователь #1352
-
-
- Сообщения: 12822
- Зарегистрирован: 20.10.2002 (Вс) 17:02
- Откуда: חיפה
tyomitch » 11.07.2007 (Ср) 16:27
HiSER тоже думает, что яркости трёх основных цветов равны?
Пусть тогда читает спецификации NTSC, к примеру.
Вернуться в Visual Basic 1–6
Кто сейчас на конференции
Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 50