Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: По какой формуле в винде накладываются изображения Добавлено: 07.06.07 01:07  

Автор вопроса:  - MaAs† -™ | ICQ: 233628153 
Доброго вам времени суток!

Может ли кто подсказать по какой формуле в винде изображения накладываются друг на друга? в том смысле что скажем есть пиксель цвета R1,G1,B1 и прозрачностью A1, то как будет высчитываться цвет если пиксель "под ним" имеет цвет R2, G2, B2? А то чет никак не могу сам додуматься...

Заранее спасибо.

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #1 Добавлено: 07.06.07 01:55
R2 = R1 + (1 - A1) * R2

Ответить

Номер ответа: 2
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #2 Добавлено: 07.06.07 02:00
посмотри BLENDFUNCTION (MSDN)

Ответить

Номер ответа: 3
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #3
Добавлено: 07.06.07 15:50
EUGY,
R2 = R1 + (1 - A1) * R2

С этим не соглашусь в корне! Подумай хотя бы логически.

Математически примерно так:
R3 = INT((A1 * R1 + (255 - A1)* R2)/255)
G3 = INT((A1 * G1 + (255 - A1)* G2)/255)
B3 = INT((A1 * G1 + (255 - A1)* G2)/255)

Фактически на ассемблере это должно описываться более лаконично..

А что, если надо рассчитать цвет на пересечении точек с разной прозрачностью (как набор слоев в Фотошоп)? Видимо расчет идет снизу вверх между результирующим цветом и цветом последующего по шкале Z.

Ответить

Номер ответа: 4
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #4 Добавлено: 07.06.07 18:09
QUOTE]С этим не соглашусь в корне![
И слава Богу.
BLENDFUNCTION

Ответить

Номер ответа: 5
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #5 Добавлено: 07.06.07 19:13
Если без гаммы - то r = r1 + (r2 - r1) * alpha \ 256. Но на практике нужно гамму учитывать - перед блендингом брать квадратный корень из цветовых коэффицентов, а итоговое значение возводить в квадрат. Естественно, делать это нужно через таблицы.

Ответить

Номер ответа: 6
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #6
Добавлено: 07.06.07 23:21
R2 = A1 * R1 + (1 - A1) * R2
я бы еще поверил

Ответить

Номер ответа: 7
Автор ответа:
 - MaAs† -™



ICQ: 233628153 

Вопросов: 13
Ответов: 29
 Профиль | | #7 Добавлено: 08.06.07 00:21
Если без гаммы ...
А я то думаю, чего в моей проге высчитанные цвета прям светятся 8) Можно поподробнее что именно возводится в квадрат?

ЗЫ: прога цвета не накладывает, а наоборот...

Ответить

Номер ответа: 8
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #8 Добавлено: 08.06.07 13:19
Можно поподробнее что именно возводится в квадрат?

Поскольку свет является волновым явлением, мощность светового потока квадратично пропорциональна его амплитуде. А амплидуда у хорошего монитора есть цифровое значение светового коэффицента на входном сигнале. Таким образом 128-я градация серого, имеющая половинную амплитуду от 256-й, на деле в четыре раза слабее последней. Белый свет приближенно можно считать шумом нормального распределения, а по закону наложения таких шумов amp(nrnd+nrnd)=amp(nrnd*sqrt(2)), т.е. средняя амплитуда двух наложенных шумов возрастает в корень квадратный из двух раз по сравнению с оригиналом. Таким образом, сложив две 128-е градации серого, мы получим не белый цвет, а sqrt((128/255)*(128/255)+(128/255)*(128/255))*255 = 181-ю градацию серого. Принцип, думаю, понятен. Создаешь таблицу с 256 значениями, берущую квадратный корень:


For I = 0 To 255
  sqrttab(I) = CByte(Int(Sqr(CDbl(I) / 255) * 255 + 0.5))
Next I


А смешивание цветов с использованием таблицы делай как-то так (Значения параметра Alpha - от 0 до 256):


Function BlendValues(ByVal V1&, ByVal V2&, ByVal Alpha&;) As Long
V1 = V1 * V1 \ 256
BlendValues = sqrttab(Max(Min(V1 + (V2 * V2 \ 256 - V1) * Alpha \ 256, 255), 0))
End Function


Max и Min в принципе необязательны, это для стабильности. Для повышения качества бленда можно увеличить число градаций мощности до 4096, соответственно изменив код.

Ответить

Номер ответа: 9
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #9
Добавлено: 08.06.07 15:31
Во как загнул. А можно ссылочку типа RTFM? ;)

Ответить

Номер ответа: 10
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #10 Добавлено: 09.06.07 12:14
А можно ссылочку типа RTFM? ;)

Даже не знаю... А зачем?

Ответить

Номер ответа: 11
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #11
Добавлено: 09.06.07 13:08
Мне тоже интересно, откуда дровишки.

Ответить

Номер ответа: 12
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #12 Добавлено: 09.06.07 14:13
Да ниоткуда... собственные наблюдения.

Ответить

Страница: 1 |

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



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