Information Technology Reference
In-Depth Information
Um die gesuchte Position innerhalb des eindimensionalen Arrays der Alpha-
Kanal-Werte zu bestimmen, müssen wir den y -Wert mit der Breite des Can-
vas multiplizieren und anschließend den x -Wert addieren. Dem aufmerksamen
Leser wird noch ein Detail aufgefallen sein: Bevor wir den ermittelten Wert
zurückgeben, wird dieser mit der Variable equidistance multipliziert. Die Ur-
sache dafür ist, dass wir in einer 8-Bit-Bilddatei nur 256 verschiedene Werte
pro Kanal speichern können. Nun weist der Großraum um Innsbruck aber eine
größere Höhendifferenz als 256 Meter auf, weshalb die Höhenangabe in diesem
PNG-Bild in Schritten von 20 Metern angegeben ist.
Sollte ein neuer Minimum-Wert entlang einer Profil-Linie gefunden werden, so
wird das dem aufrufenden Script mitgeteilt:
if (h < min) {
min = h;
if (evt.data.useWorker) {
postMessage({task:'newMin',min:min,id: evt.data.id});
}
}
Gleiches gilt natürlich für neue Maximum-Werte. Am Ende jeder Schleife über
alle Teilstrecken wird der Fortschrittsbalken aktualisiert, und sobald alle Teil-
strecken errechnet sind, wird das Ergebnis, verpackt in der Variable d , an das
Haupt-Script zurückgeschickt. Wird das Script als Worker ausgeführt, so wer-
den die Daten mit postMessage() versendet, und ohne Worker wird das Ergebnis
mit return an die aufrufende Funktion zurückgeben.
if (evt.data.useWorker) {
postMessage({task:'update', status:i, id:evt.data.id});
}
...
if (evt.data.useWorker) {
postMessage(d);
}
else {
return {data:d};
}
Die clientseitige Analyse von Bilddaten spart Rechenkapazität auf dem Server
und außerdem Netzwerk-Bandbreite. Eine ausreichende Hardware-Ausstat-
tung auf dem Client vorausgesetzt, könnte man so Benutzern die Möglichkeit
geben, Höhenprofile auf einem Bild mit Alpha-Kanal zu digitalisieren und diese
dann in Echtzeit grafisch darzustellen.
Search WWH ::




Custom Search