![]() |
|
||||||||||
|
|||||
|
Добрый день! Не могу понять как работает этот фильтр. В хэлпе приведена формула:
dstPixel[x, y] = srcPixel[x + ((componentX(x, y) - 128) * scaleX) / 256, y + ((componentY(x, y) - 128) * scaleY) / 256] Но! Если у меня нейтральное изображение карты смещений, то пиксел изменять положение не должен. Поясню: если я задаю цветовой канал, по которому будет происходить смещение, например зеленым, а в карте смещения такого цвета нет (т.е. в любой точке значение зеленого канала равно 0), то пикселы останутся на месте. Так? Но по формуле выходит так: не равно 0, т.к. componentX(x, y) != 0!!!!! И соответственно смещение происходить будет!!! Как так???? |
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
|
|
|||||
|
Я от обратного отталкиваюсь: смещения происходить не должно, если
В этом случае componentX(x, y) должен быть равен 128. Но это противоричит дисплейсменту - если componentX(x, y) равен какому-то значению, то должно быть смещение.
|
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
Нет, там вроде как раз если componentX(x, y)=128, то сдвига нет. А если не равен, то сдвиг либо влево, либо вправо соответственно. Так направление сдвига учитывается.
|
|
|||||
|
Регистрация: May 2008
Сообщений: 476
|
Волгоградец!
Вот отведай сие блюдо ![]() Как видно из названия фильтра, речь идет о смещении пикселей исходного изображения в соответствии с некоей картой в народе именуемой более картой смещения. Для каждого пикселя исходного изображения выполняются следующие действия: 1. Берется пиксель (x,y) карты смещения 2. Рассчитывается смещение в зависимости от цвета этого пикселя (dx,dy) 3. Вычисляется новое положение пискеля в исходном изображении по формулам: x+dx, y+dy. 4. Рисуется пиксель в вычисленной точке, если, конечно, эта точка находиться в допустимых пределах. Полная формула: новый_пиксель[X]=исходный_пиксель[X]+(каналX_цвета_пикселя_карты_смещения-128)*масштаб_X/256 новый_пиксель[Y]=исходный_пиксель[Y]+(каналY_цвета_пикселя_карты_смещения-128)*масштаб_Y/256 Синтаксис: DisplacementMapFilter(mapBitmap:BitmapData, mapPoint:Point, componentX:Number, componentY:Number, scaleX:Number, scaleY:Number, [mode:String], [color:Number], [alpha:Number]) mapBitmap - карта смещения; componentX - указывает какая цветовая сотавляющая будет использоваться для расчета X componentY - указывает какая цветовая сотавляющая будет использоваться для расчета Y ну и тд |
|
|||||
|
Да хэлп я читал. Это все понятно. Объясню, что мне не понятно: смещение происходит в соответствии с интенсивностью цветового канала - если цвет отсутствует, то смещения нет. Соответственно, если интенсивность равна 255 (максимальное значение), то происходит наибольшее смещение. В формуле я что-то не вижу, где учитывается значение цвета...
|
|
|||||
|
Регистрация: May 2008
Сообщений: 476
|
Увы. Дела обстоят несколько иначе.
0 - канала карты смещения это не нулевое смещение пиксела а отрицательное (т.е. противоположно положительному направлению X или Y) 255 - соотвествует максимальному смещению в положительную сторону; 128 - смещения вообще никакого нет. Посмотри в формулку, то че в скобках при значении каналX_цвета_пикселя_карты_смещения = 128 вся эта гирлянда обнуляется и новый_пиксель[X]=исходный_пиксель[X] т.е. смещения собственно и не будет |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:49. |
|
|
« Предыдущая тема | Следующая тема » |
|
|