私はRGBA値を持つUint8Array
と、画像の一部が更新された情報を受け取りました。この生のビットマップ情報をキャンバスに戻す最も簡単な方法は何ですか?私は、アレイと設定された画素情報かかわらず、手動でループに2Dレンダリングコンテキストを使用しているが、これは非常に遅いです:Uint8Arrayをキャンバスにレンダリングする最も速い方法
let imageData = new ImageData(1920, 1080);
for (var i=0;i < args.frameBuffer.length; i+=4) {
imageData.data[i] = args.frameBuffer[i];
imageData.data[i+1] = args.frameBuffer[i+1];
imageData.data[i+2] = args.frameBuffer[i+2];
imageData.data[i+3] = args.frameBuffer[i+3];
}
context.putImageData(imageData, 0, 0, args.dirtyX, args.dirtyY, args.dirtyWidth, args.dirtyHeight);
これを行うには、より効率的な方法だろうか? WebGLは2Dコンテキストよりも優れていますか?ネイティブまたはThree.jsのようなものを介して?
で繰り返すことができるもちろん
ような何かを行うことができればen-US/docs/Web/API/WebGL_API/Tutorial/Using_textures_in_WebGL)を参照してください。特に、[texImage2D](https://developer.mozilla.org/en/docs/Web/API/WebGLRenderingContext/texImage2D)メソッド。 – mlkn
型付き配列間でデータを移動するには、 'imageDataTo.data.set(imageDataFrom.data)'を使用します。データの一部(rect)をコピーするには、 'set'と' subArray'を使って行を移動します。各行(imageDataはid) 'idTo.data.set(idFrom.data.subArray(yFrom * idFrom.width + xFrom)* 4、width)、(yTo * idTo.width + xTo)* 4)' If 'data32 = new Uint32Array(imageData.data.buffer)'を使って1つの読み書きでピクセルを扱うためにUint32Arrayを作成することができる各ピクセルをチェックする必要があります。little/bigエンディアンが動作するように注意します。またキャンバスはイメージですので、 'context.drawImage(canvasFrom、...'キャンバスからキャンバスにレンダリングすることができます。 – Blindman67