Синхронизация наложения с фильтром карты смещения

Я использую DisplacementMapFilter для создания эффекта глобуса на плоской карте. Моя проблема в том, что я также хочу синхронизировать некоторые метки с этой картой. У меня есть координаты x/y для их местоположений на плоской карте, но мне нужно сопоставить их с уже смещенным изображением.

Я хотел бы иметь возможность сделать это, используя BitmapData, который содержит карту смещения, так что изменение растрового изображения изменяет как фильтр смещения, так и расположение меток. Кроме того, метки не будут статичными, и точность очень важна.


person Alexis King    schedule 13.12.2011    source источник


Ответы (1)


В справочнике по DisplacementMapFilter есть формула. :

dstPixel[x, y] =
  srcPixel[
    x + ((componentX(x, y) - 128) * scaleX) / 256,
    y + ((componentY(x, y) - 128) *scaleY) / 256)
  ]

componentX/Y - это цветовые каналы в растровом изображении (можно привязать любой канал к координатам).
Насколько я понимаю, нужно сдвигать метки карты, как это делал бы фильтр. Просто возьмите координаты метки (x, y), образец исходного растрового изображения с getPixel32(x, y). Затем нужно выяснить, какие байты взять за x, y — полагаю, по умолчанию это будут компоненты R, G соответственно. Затем используйте формулу, чтобы получить координаты смещенной метки.
Примечание: getPixel32 возвращает цвет uint в формате ARGB. Используйте оператор сдвига (>>) для получения компонентов цвета:

uint ARGB = bitmap.getPixel32(x, y);
int B = ARGB & 0xFF;
int G = (ARGB >> 8) & 0xFF;
int R = (ARGB >> 16) & 0xFF;
person alxx    schedule 13.12.2011
comment
Спасибо, но я обнаружил, что этот алгоритм является ложью. Это x - ((componentX(x,... и y - ((componentY(x..., а не +. При этом он прекрасно работает. - person Alexis King; 14.12.2011