私はおそらくここで頭がおかしいことをしているのですが、キャンバスでアルファ値を連携させるのに苦労しています。キャンバス上のスポットから不透明な色をサンプリングし、より透明にして別の場所に配置しようとしていますが、アルファ部分が機能していないようです。簡略化すると、次のようになります (スクリプト全体に散りばめられた関数から凝縮されています)。
p = ground.ctx.getImageData(loc.x, loc.y, 1, 1).data;
col = {R: p[0], G: p[1], B: p[2], a: p[3]};
col.a = col.a - 0.1;
ground.ctx.fillStyle = 'rgba(' + col.R + ', ' + col.G + ', ' + col.B + ', ' + col.a + ')';
ground.ctx.fillRect(nuLoc.x, nuLoc.y, sqrSize, sqrSize);
それはすべて実行されますが、fillStyleの値をテストすると、標準のRGB「#fa674c」などだけが得られます-アルファについては言及されていません-新しく描画されたRectからgetImageData()を取得すると、値は再び完全に不透明になります.
経験的にも、すべてのチュートリアル (および仕様) を読んでも、私が理解できなかったもう 1 つのことは、アルファが 0-1.0 または 0-255 のどちらであるかということです。ほとんどの情報源は 0 ~ 1.0 について語っていますが、getImageData() は 0 ~ 255 を返します... どちらの方法でも機能させることはできません。