3

WebGLのテクスチャに変換しようとしているUint32Arrayがあります。これを行うには、キャンバスにRGBA値として配列を書き込み、キャンバスからbase64でエンコードされたPNGを取得して、テクスチャとして送信します。

ピクセル値を0のアルファに設定すると、PNGへの変換時に対応するRGBチャネルもゼロになります。これは実装の詳細ですか?HTML5以外のプログラムでPNGを作成する場合、(255,255,255,0)の(RGBA)4つ組を作成できますか?アルファ値1を使用してみましたが、他のすべてのチャネルはそのまま残っているため、これは事前に乗算されたアルファの問題ではありません。

この効果を再現するためのJavaScriptコードを次に示します。

    var img = new Image();
    var canvasObj = $('<canvas width="1" height="1"></canvas>');
    var context = canvasObj[0].getContext('2d');
    var imgd = context.getImageData(0,0,1,1);
    var pix = imgd.data;
    pix[0]=255; pix[1]=255; pix[2]=255; pix[3]=0;
    context.putImageData(imgd,0,0);
    img.src = canvasObj[0].toDataURL("image/png");

    context.drawImage(img,0,0);
    var imgd2 = context.getImageData(0,0,1,1);
    var pix2 = imgd2.data;

pix2はすべて0になります。

ありがとう!

4

1 に答える 1

3

PNG仕様(http://www.libpng.org/pub/png/spec/1.2/png-1.2-pdg.html)の一部のようです。

...完全に透明なピクセルには、最適な圧縮のためにすべて同じカラー値を割り当てる必要があります。

直接のソースは見つかりませんでしたが、この特定の実装ではすべてのチャネルがゼロに設定されているようです。

于 2012-07-22T17:02:37.800 に答える