Obtenez de pixels de la couleur de la toile, à la souris
Est-il possible d'obtenir la valeur RVB des pixels sous la souris? Est-il un exemple complet de cette? Voici ce que j'ai à ce jour:
<script>
function draw() {
var ctx = document.getElementById('canvas').getContext('2d');
var img = new Image();
img.src = 'Your URL';
img.onload = function(){
ctx.drawImage(img,0,0);
};
canvas.onmousemove = function(e) {
var mouseX, mouseY;
if(e.offsetX) {
mouseX = e.offsetX;
mouseY = e.offsetY;
}
else if(e.layerX) {
mouseX = e.layerX;
mouseY = e.layerY;
}
var c = ctx.getImageData(mouseX, mouseY, 1, 1).data;
$('#ttip').css({'left':mouseX+20, 'top':mouseY+20}).html(c[0]+'-'+c[1]+'-'+c[2]);
};
}
</script>
- Double de stackoverflow.com/questions/1936021/...
Vous devez vous connecter pour publier un commentaire.
Voici un complet, autonome exemple. Tout d'abord, utilisez le code HTML suivant:
Pertinentes JavaScript:
Le code ci-dessus, suppose la présence de jQuery et les fonctions utilitaires:
Le voir en action sur JSFIDDLE:
offsetParent
s est un moyen très agréable d'aller à ce sujet. Je n'ai jamais pensé à ce sujet. Mais pourquoi vous n'utilisez pas régulièrementwhile
boucle au lieu d'unif
et puis undo...while
?Je sais que c'est une vieille question, mais voici une autre.
J'avais stocker que des données d'image dans un tableau, puis, sur la souris déplacer l'événement sur la toile:
Beaucoup plus facile que d'obtenir les données images à chaque fois.
La fusion de diverses références trouvées ici dans StackOverflow (y compris l'article ci-dessus) et dans d'autres sites, je l'ai fait à l'aide de javascript et JQuery:
C'est ma solution complète. Ici, j'ai utilisé de la toile et une image, mais si vous avez besoin d'utiliser
<map>
sur l'image, c'est possible aussi.appel getImageData tous les temps va ralentir le processus ... pour accélérer les choses, je vous recommandons de stocker les données de l'image et ensuite, vous pouvez obtenir pix valeur facilement et rapidement, donc faire quelque chose comme cela pour de meilleures performances
Réponse Rapide
context.getImageData(x, y, 1, 1).data;
retourne un rgba tableau. par exemple,[50, 50, 50, 255]
Voici une version de @lwburk de rgbToHex fonction qui prend la rgba tableau comme argument.
[10, 42, 67, 255]
produit#a2a43
qui n'est pas valide / bien formaté hex code de couleur.Vous pouvez essayer la couleur de l'échantillonneur. C'est un moyen facile de choisir une couleur dans une toile. Voir démo.
J'ai un très simple exemple de travail de geting de la couleur des pixels de la toile.
Première HTML de base:
Puis JS pour en tirer quelque chose sur la Toile, et pour obtenir la couleur:
Ici est un exemple de travail, il suffit de regarder la console.
@Wayne Burkett est réponse est bon. Si vous voulais aussi extraire la valeur alpha pour obtenir une couleur rvba, nous pourrions le faire:
J'ai divisé la valeur alpha par 255 parce que les données images de l'objet stocke sous la forme d'un entier compris entre 0 et 255, mais la plupart des applications (par exemple,
CanvasRenderingContext2D.fillRect()
) exigent des couleurs en CSS valide format, où la valeur alpha est comprise entre 0 et 1.(Rappelez-vous aussi que si vous extraire d'une couleur transparente, puis la ramener sur la toile, il se superpose quelle que soit la couleur est là auparavant. Donc, si vous avez tiré la couleur
rgba(0,0,0,0.1)
sur le même spot 10 fois, il serait noir.)