Синхронизация наложения с фильтром карты смещения - PullRequest
3 голосов
/ 13 декабря 2011

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

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

1 Ответ

2 голосов
/ 13 декабря 2011

Есть формула в 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;
...