2009-12-08 8 views

Répondre

59

Petite mise à jour, car la question est maintenant plus d'un demi-an:

En Chrome/Chrome 6, vous pouvez maintenant envoyer une toile imageData objet à un travailleur web, laissez le travailleur web apporter des modifications à la objet, puis réécrivez-le sur le canevas à l'aide de putImageData (..).

Google Chromabrush fait cette façon, le code source est disponible ici:

Mise à jour:

Les derniers instantanés de développement Opera (10.70) et Firefox (4.0b1) supportent également ImageDa ta objets à un travailleur Web.

Mise à jour 2017:

liens réels de Github (plus facile de trouver les fichiers nécessaires à partir Chromabrush):

+1

Laissez-moi deviner IE est différent? – Lothar

4

n °

La spécification a été mis à jour postMessage quelques mois en arrière pour vous permettre d'afficher des objets imageData mais encore personne n'a mis en œuvre que le comportement (nous sommes tous pour y arriver). Le problème avec canvas lui-même est que c'est un élément DOM et donc ne fonctionne pas dans un worker (il n'y a pas de DOM). Cela a été soulevé récemment sur les listes de diffusion whatwg ou web-apps, donc je pense que nous allons commencer à voir s'il est possible de fournir une API semblable à CanvasRenderingContext2D dans les workers.

+0

J'avais l'impression que le WebWorker ne permettrait aucune interaction avec un DOM comme cela se heurterait à prob possible lems si plusieurs webworkers font des changements. –

+3

Le problème est que le DOM n'a pas de concept de concurrence, donc les travailleurs n'autorisent aucun état partagé. La seule façon de communiquer avec un worker est avec postMessage, et cela effectue un clone selon "l'algorithme de clonage structuré interne" qui peut être considéré comme JSON mais avec un support supplémentaire pour quelques types de clés (File, FileList, ImageData, Blob, Date et RegExp) – olliej

+3

Cette réponse n'est pas à jour. L'autre réponse est maintenant meilleure. – Baxissimo