2009-12-08 10 views

Antwort

59

Kleines Update, da die Frage ist jetzt mehr als ein halbes Jahr alt:

In Chrome/Chromium 6 Sie jetzt eine Leinwand schicken Imagedata zu einem Web-Worker-Objekt, lassen Sie die Web-Arbeiter Änderungen an den Objekt und dann schreiben Sie es zurück in die Leinwand mit putImageData (..).

Update::

Die neueste Entwicklung Schnappschüsse von

Googles Chromabrush tut es auf diese Weise, die Quelle-Code finden Sie hier Opera (10.70) und Firefox (4.0b1) unterstützen auch das Übergeben von ImageDa Objekte zu einem Web-Arbeiter.

-Update 2017:

Tatsächliche Links von Github (leichter benötigten Dateien aus Chromabrush zu finden):

+1

Lass mich raten, IE ist anders? – Lothar

4

Nr

Die postmessage spec wurde ein paar Monate aktualisiert zurück, damit Sie Imagedata-Objekte, aber noch niemand schreiben hat, dass das Verhalten umgesetzt (wir alles bekommen). Das Problem mit Canvas selbst ist, dass es ein DOM-Element ist und daher in einem Worker nicht funktioniert (es gibt kein DOM).

Dies wurde kürzlich auf den Mailinglisten von whatwg oder web-apps angesprochen. Ich vermute, dass wir uns überlegen werden, ob es möglich ist, in Workern eine CanvasRenderingContext2D-ähnliche API bereitzustellen.

+0

Ich hatte den Eindruck, die WebWorker würde keine Interaktion mit einem DOM erlauben, da dies zu möglichen Problemen führen würde wenn mehrere Webworker Änderungen vornehmen. –

+3

Das Problem ist, dass das DOM kein Concurrency-Konzept hat, daher erlauben Workers keinen gemeinsamen Status. Die einzige Möglichkeit, mit einem Worker zu kommunizieren, ist mit postMessage, und das führt einen Klon nach dem "internal structured cloning algorithm" durch, der grundsätzlich als JSON gedacht ist, aber mit zusätzlicher Unterstützung für einige Schlüsseltypen (File, FileList, ImageData, Blob, Date und RegExp) – olliej

+3

Diese Antwort ist veraltet. Die andere Antwort ist jetzt besser. – Baxissimo