TS 使用Canvas获取鼠标点击处颜色

最近使用使用到这个东西,好久不用都快忘了,记录下 

<canvas #t id="canvas" class="shadow-6 radius" (click)="getColor($event, t)"></canvas>

 首先呢,如果现在canvas上绘制某些图,就直接使用下面的方法

const img = new Image();
img.src = 'imgUrl e.g localhost:9000/xxx.png';
img.onload = function () {
    const canvas = document.getElementById('canvas') as any;
    const ctx = canvas.getContext('2d');
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.drawImage(this, 0, 0, canvas.width, canvas.height);
};
ctx.drawImage(this, 0, 0, canvas.width, canvas.height);

比下面这种写法的优势就是,这样可以使图片自动缩放完整填充到canvas里面。

ctx.drawImage(this, 0, 0);

 下面的代码就可以获取出鼠标点击处,canvas内部颜色的参数了

  getColor(cursor: any, t: any): void {
    t.__proto__.getPixelColor = function (x: any, y: any) {
      const thisContext = this.getContext('2d');
      const imageData = thisContext.getImageData(x, y, 1, 1);
      const pixel = imageData.data;
      const rs = pixel[0];
      const gs = pixel[1];
      const bs = pixel[2];
      let as = pixel[3] / 255;
      as = Math.round(as * 100) / 100;
      let rHex = rs.toString(16);
      rs < 16 && (rHex = '0' + rHex);
      let gHex = gs.toString(16);
      gs < 16 && (gHex = '0' + gHex);
      let bHex = bs.toString(16);
      bs < 16 && (bHex = '0' + bHex);
      const rgbaColor = 'rgba(' + rs + ',' + gs + ',' + bs + ',' + as + ')';
      const rgbColor = 'rgb(' + rs + ',' + gs + ',' + bs + ')';
      const hexColor = '#' + rHex + gHex + bHex;
      return {
        rgba: rgbaColor,
        rgb: rgbColor,
        hex: hexColor,
        r: rs,
        g: gs,
        b: bs,
        a: as,
      };
    };
    const color = t.getPixelColor(cursor.offsetX, cursor.offsetY / 2);
    // eslint-disable-next-line no-console
    console.log(color);
}

至于最后为什么使用 offsetY/2呢,我的另一篇blog写了原因并且解释了这样做法。
Canvas 使用鼠标坐标getImageData(x, y, 1, 1) 获取图像颜色时候 下半部分图像全为rgb(0,0,0) 解决方案_Damien_J_Scott的博客-CSDN博客

或者使用robotjs

robotjs - npm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值