3 Stimmen

Synchronisieren von Overlay mit Verschiebungskartenfilter

Ich verwende einen DisplacementMapFilter, um einen globusähnlichen Effekt auf einer flachen Karte zu erzeugen. Mein Problem ist, dass ich einige Beschriftungen mit dieser Karte synchronisieren möchte. Ich habe die x/y-Koordinaten für ihre Positionen auf der flachen Karte, aber ich muss sie auf das jetzt verlagerte Bild übertragen.

Ich möchte dies gerne mit dem BitmapData tun, das die Verschiebungskarte enthält, sodass das Ändern des Bitmaps sowohl den Verschiebungsfilter als auch die Beschriftungspositionen ändert. Außerdem werden die Beschriftungen nicht statisch sein, und die Genauigkeit ist ziemlich wichtig.

2voto

alxx Punkte 9902

Es gibt eine Formel im DisplacementMapFilter Referenz:

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

componentX/Y sind Farbkanäle im Bitmap (Sie können jeden Kanal an Koordinaten binden).
Wie ich verstehe, müssen Sie Etiketten verschieben, wie es der Filter tun würde. Nehmen Sie einfach Label-Koordinaten (x, y), sampeln Sie die Quell-Bitmap mit getPixel32(x, y). Dann müssen Sie herausfinden, welche Bytes für x, y zu verwenden sind - ich vermute, dass es standardmäßig die R-, G-Komponenten sein würden. Verwenden Sie dann die Formel, um verschobene Label-Koordinaten zu erhalten.
Hinweis: getPixel32 gibt uint-Farbe im ARGB-Format zurück. Verwenden Sie den Shift-Operator (>>), um Farbkomponenten zu erhalten:

uint ARGB = bitmap.getPixel32(x, y);
int B = ARGB & 0xFF;
int G = (ARGB >> 8) & 0xFF;
int R = (ARGB >> 16) & 0xFF;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X