JSFiddle在画布中获取像素的颜色总是为rgb值返回000

时间:2019-06-25 16:24:50

标签: javascript canvas

我已经找到/尝试了许多关于stackoverflow和其他资源的解决方案,但是我仍然无法正确读取鼠标悬停的像素值的颜色。

我创建了一个JSFiddle,在画布上绘制了一个矩形,并将画布背景设置为蓝色。

我有一个onMouseMove事件,它将在每次鼠标移动时触发。此功能的目的是获取鼠标的x和y坐标,并使用这些坐标获取该位置的像素的颜色。

这里是JSFiddle的链接:https://jsfiddle.net/michael_t/z71g6vcn/134/

这是js文件:

class Canvas extends React.Component {
  constructor(props) {
    super(props);

    this.state = { x: 0, y: 0 };
  }

  componentDidMount() {
    const canvas = this.refs.canvas
    const ctx = canvas.getContext("2d")

    ctx.fillRect(25, 25, 100, 100);
    ctx.clearRect(45, 45, 60, 60);
    ctx.strokeRect(50, 50, 50, 50);
  }

  _onMouseMove(e) {
    this.setState({ x: e.screenX, y: e.screenY });
    console.log("x: " + this.state.x + " y: " + this.state.y);

    var canvas = this.refs.canvas;
    var ctx = canvas.getContext("2d");
    var data = ctx.getImageData(this.state.x, this.state.y, 1, 1).data;
    console.log(data);
  }

  render() {
    return(
      <div >
        <canvas onMouseMove={this._onMouseMove.bind(this)} ref="canvas" width={640} height={425} />
      </div>
    )
  }
}

ReactDOM.render(<Canvas />, document.querySelector("#app"))

HTML文件:

<div id="app"></div>

CSS:

body {
  background: #20262E;
  padding: 20px;
  font-family: Helvetica;
}

#app {
  background: #fff;
  border-radius: 4px;
  padding: 20px;
  transition: all 0.2s;
}

/* #example {
  background-color: blue;
} */

canvas {
  background-color: blue;
}

li {
  margin: 8px 0;
}

h2 {
  font-weight: bold;
  margin-bottom: 15px;
}

.done {
  color: rgba(0, 0, 0, 0.3);
  text-decoration: line-through;
}

input {
  margin-right: 5px;
}

数据变量将像素的RGB值保存在计算出的位置。出于某种原因,尽管我将鼠标移到蓝色背景上,但RGB值始终为000。尽管x和y坐标正在正确更新,所以我不确定getImageData函数是否存在问题,或者可能是什么。

如何正确读取鼠标所在的像素值?

0 个答案:

没有答案