| <html> |
| <head> |
| <style type="text/css"> |
| video { |
| display: none; |
| } |
| </style> |
| </head> |
| <body> |
| <video id="video" width="30" height="30"> |
| <source src="resources/canvas_video.webm" type="video/webm" /> |
| </video> |
| <canvas id="videoOutput" width="150" height="150"></canvas> |
| <canvas id="imageOutput" width="150" height="150"></canvas> |
| <canvas id="canvasOutput" width="150" height="150"></canvas> |
| <canvas id="offscreenCanvas2DOutput" width="150" height="150"></canvas> |
| <canvas id="offscreenCanvasWebGLOutput" width="150" height="150"></canvas> |
| |
| <script> |
| function drawImageSourceToOffscreenCanvas(imageSource, outputCanvas) { |
| var aCanvas = new OffscreenCanvas(150, 150); |
| var ctx = aCanvas.getContext('2d'); |
| |
| ctx.drawImage(imageSource, 0, 0); |
| ctx.drawImage(imageSource, 30, 30, 30, 30); |
| // stretch the image |
| ctx.drawImage(imageSource, 8, 8, 15, 15, 60, 60, 60, 60); |
| // reduce the image |
| ctx.drawImage(imageSource, 8, 8, 15, 15, 120, 120, 15, 15); |
| |
| var outputCanvasRenderer = outputCanvas.getContext("bitmaprenderer"); |
| outputCanvasRenderer.transferFromImageBitmap(aCanvas.transferToImageBitmap()); |
| }; |
| |
| // image source as video |
| var video = document.getElementById('video'); |
| var videoOnPlay = function() { |
| video.removeEventListener("playing", videoOnPlay); |
| drawImageSourceToOffscreenCanvas(video, document.getElementById('videoOutput')); |
| }; |
| video.addEventListener("playing", videoOnPlay, true); |
| video.play(); |
| |
| // image source as image |
| var image = new Image(); |
| var imageOnLoad = function() { |
| image.removeEventListener("load", imageOnLoad); |
| drawImageSourceToOffscreenCanvas(image, document.getElementById('imageOutput')); |
| }; |
| image.addEventListener("load", imageOnLoad); |
| image.src = "resources/pattern.png"; |
| |
| // image source as canvas |
| var htmlCanvas = document.createElement('canvas'); |
| htmlCanvas.width = 30; |
| htmlCanvas.height = 30; |
| var htmlCanvasCtx = htmlCanvas.getContext("2d"); |
| htmlCanvasCtx.fillStyle = "blue"; |
| htmlCanvasCtx.fillRect(0, 0, 15, 30); |
| htmlCanvasCtx.fillStyle = "red"; |
| htmlCanvasCtx.fillRect(15, 0, 30, 30); |
| drawImageSourceToOffscreenCanvas(htmlCanvas, document.getElementById('canvasOutput')); |
| |
| // image source as OffscreenCanvas with 2D context |
| var offscreenCanvas2D = new OffscreenCanvas(30, 30); |
| var offscreenCanvas2DCtx = offscreenCanvas2D.getContext("2d"); |
| offscreenCanvas2DCtx.fillStyle = "blue"; |
| offscreenCanvas2DCtx.fillRect(0, 0, 15, 30); |
| offscreenCanvas2DCtx.fillStyle = "red"; |
| offscreenCanvas2DCtx.fillRect(15, 0, 30, 30); |
| drawImageSourceToOffscreenCanvas(offscreenCanvas2D, document.getElementById('offscreenCanvas2DOutput')); |
| |
| // Image source as OffscreenCanvas with webGL context |
| var offscreenCanvasWebGL = new OffscreenCanvas(30, 30); |
| var gl = offscreenCanvasWebGL.getContext("webgl"); |
| gl.clearColor(0.0, 0.0, 1.0, 1.0); |
| gl.clear(gl.COLOR_BUFFER_BIT); |
| drawImageSourceToOffscreenCanvas(offscreenCanvasWebGL, document.getElementById('offscreenCanvasWebGLOutput')); |
| |
| </script> |
| </body> |
| |