Creating texture from getImageData (Javascript)

后端 未结 3 1687
谎友^
谎友^ 2021-01-23 16:18

It is possibile to create a texture (to use on a element in a canvas) from the getImageData array of another canvas (in the same html page)? maybe without three.js? Thanks a lot

相关标签:
3条回答
  • 2021-01-23 16:57

    Thats the point of getImageData, getting an image to manipulate it and then draw on any canvas.

    imageData = someContext.getImageData(0, 0, canvasWidth, canvasHeight);
    anotherContext.putImageData(imageData, 0, 0);
    

    doing things like: http://jsfiddle.net/jaibuu/myRGr/

    If you don't intend to do pixel manipulation, you should only use drawImage(), without getImageData/putImageData which are slower though.

    0 讨论(0)
  • 2021-01-23 17:12

    The coolest thing about WebGL's texImage2D method is that its last argument can be a DOM element instead of an ArrayBuffer, in which case it copies its rendered content into your texture object.

    For example:

    var canvas2d = document.getElementById('canvas2d');
    gl.bindTexture(gl.TEXTURE_2D, myTexture);
    gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, canvas2d);
    

    There's a little tutorial about this feature here.

    0 讨论(0)
  • 2021-01-23 17:20

    Yes, texImage2D can take an ImageData.

    var imageData = some2DCanvasContext.getImageData(...);
    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, imageData);
    

    Here are is one of the WebGL conformance tests that test this functionality

    https://www.khronos.org/registry/webgl/sdk/tests/conformance/textures/tex-image-and-sub-image-2d-with-image-data.html

    0 讨论(0)
提交回复
热议问题