Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.139.233.43] |
|
Сообщ.
#1
,
|
|
|
Хочу понять принцип совмещения цветов. Например, есть 2 одинаковых источника света, у которых RGB R=128, G=0, B=0. Если эти 2 источника совмещаются в одной точке, то получим результирующий свет R=128*2, G=0*2, B=0*2 или по какой формуле будет расчёт?
|
Сообщ.
#2
,
|
|
|
попадалось такое для нахождения суммирующего цвета для диапазона ячеек
For Each c In aRange.Cells i = c.Interior.Color If i <> 16777215 Then k = k + i R = R + 1 End If Next End If MainColor = k / R |
Сообщ.
#3
,
|
|
|
Если с гамма коррекцией:
r = GammaAdd(r1, r2) g = GammaAdd(g1, g2) b = GammaAdd(b1, b2) Function GammaAdd(v1 As Byte, v2 As Byte) As Byte Dim v As Long v = ((v1 / 255) ^ 2.2 + (v2 / 255) ^ 2.2) ^ (1 / 2.2) * 255 If v > 255 Then GammaAdd = 255 Else GammaAdd = v End Function |
Сообщ.
#4
,
|
|
|
Спасибо. Тут вместо v As Long можно v As Integer
|
Сообщ.
#5
,
|
|
|
Цитата BlackSun @ Тут вместо v As Long можно v As Integer Можно, просто As Long быстрее работает (хотя при использовании степеней, это не так важно). |
Сообщ.
#6
,
|
|
|
Хочешь сказать, что CLng быстрее CInt?
|
Сообщ.
#7
,
|
|
|
Арифметика с Long переменными быстрее, чем с Integer потому, что код, режим процессора 32-битный, 16-битные команды дополнены префиксом.
А скорость конкретно CLng и CInt зависит от многих факторов, в том числе от того, какой тип данных берётся изначально. |
Сообщ.
#8
,
|
|
|
1. По умолчанию в VB идёт тип Integer, т.е. код
Dim v As Long v = ((v1 / 255) ^ 2.2 + (v2 / 255) ^ 2.2) ^ (1 / 2.2) * 255 будет заменён на v = CLng((v1 / 255) ^ 2.2 + (v2 / 255) ^ 2.2) ^ (1 / 2.2) * 255) или нет? 2. 32-x битные регистры делятся на два 16-ти битных, и расширения Integer до Long не должно происходить. Может именно поэтому VB по умолчанию имеет тип Integer, т.к. большинству операций его достаточно и они должны выполняться "без выкрутасов". |
Сообщ.
#9
,
|
|
|
teger медленнее, чем Long. Integer переменная использует 4 байта, столько же, сколько и Long.
|
Сообщ.
#10
,
|
|
|
3. Арифметика-то идёт с Byte и Integer, а в Long пишется рез-т.
Добавлено Цитата MIF @ Integer переменная использует 4 байта с каких это пор? |
Сообщ.
#11
,
|
|
|
Цитата BlackSun @ Арифметика-то идёт с Byte и Integer В данном конкретном примере вся арифметика работает в Double, потому что первое выполняемое действие - деление. Просто это уже привычка, когда арифметика целочисленная, то Long оптимальнее, Integer я практически никогда не использую, кроме случаев, когда это необходимо. Цитата BlackSun @ По умолчанию в VB идёт тип Integer Это касается только целочисленных констант от -32768 до 32767. Там, кстати, можно раскрыть скобки и сократить вычисления. То, что я дал, следует воспринимать не как готовый код, а как демонстрацию математики происходящего. |