このコードをベースhttp://www.script-tutorials.com/demos/158/index.htmlとして使用する
私は次のようにコーディングします:
$canvas = $('<canvas/>');
ctx = $canvas[0].getContext('2d');
var image = new Image(); // create an image object in memory
image.onload = function () {
// render the image on the canvas
$canvas.width(this.width).height(this.height); // resize the canvas
ctx.drawImage(image, 0, 0, this.width, this.height);
var nav = $("#navigation"); // get the navigation container
// find a pixel about in the middle where the navigation would be
var pos = {
left: nav.position().left+(nav.width()/2),
top: nav.position().top+(nav.height()/2)
}
var pixel = ctx.getImageData(pos.left,pos.top, 1, 1).data;
canvas=null; // no longer need this canvas
// invert the pixel colour, ignoring the alpha channel
var invertedPixelColor = "rgba("+(255-pixel[0])+", "+
(255-pixel[1])+", "+
(255-pixel[2])+", "+
1+")";
nav.css("color",invertedPixelColor); // set the nav text to inverted color
}
image.src = imageURL; // load the image, triggering the calc
この例には次の問題があります。
- イメージがキャンバスに正しくレンダリングされないのはなぜですか? (デモを下にスクロールして、レンダリングされたキャンバスを確認します)
- 画像データから 0 しか返されないのはなぜですか?
私は持っている
window.console &&
console.log("before: rgba("+pixel[0]+", "+pixel[1]+", "+pixel[2]+", "+pixel[3]+")");
window.console &&
console.log("after: rgba("+(255-pixel[0])+", "+(255-pixel[1])+", "+(255-pixel[2])+", "+1+")");
そしてそれは戻ってきます
before: rgba(0, 0, 0, 0)
after: rgba(255, 255, 255, 1)
簡単なものが欠けていることを願っています
更新$("<canvas/>)[0].getContext('2d');
しました-100%幸せな状況ではないようです...