Ich bin neu mit Leinwand und ich habe für ein paar Stunden googeln, aber ich bin fest.HTML5 Leinwand (Video) Element in Stücke schneiden
Was ich tun möchte, ist ein Video auf einem Canvas-Element zu rendern, zu teilen und die Teile zu animieren. Ich bin auf halbem Weg gibt (siehe: http://jsbin.com/riduxadazi/edit?html,css,js,console,output), aber ich habe ein paar Fragen:
- Bin ich die Dinge richtig tun, oder ist dies extrem ineffizient?
- Ich möchte das Video Vollbild verwenden. Was auch immer ich versuche, das Leinwandgitter + Video scheint nicht mit der Größe übereinzustimmen.
- Ich möchte die Teile des Videos animieren, aber ich habe keine Ahnung, wie ich sie ansprechen sollte. Kann ich ein Array bekommen und die Stücke einzeln animieren?
Mein JS sieht so aus. Ich habe versucht, Kommentare zu den wichtigsten Teilen hinzuzufügen. Zumindest was ich denke, waren die wichtigsten Teile;)
var video = document.getElementById('video'); // Get the video
var ctx = canvas.getContext('2d'),
columns = 6,
rows = 4,
w, h, tileWidth, tileHeight;
// Start video and add it to canvas
video.addEventListener('play', function() {
var $this = this; //cache
(function loop() {
if (!$this.paused && !$this.ended) {
ctx.drawImage($this, 0, 0,window.innerWidth,window.innerHeight);
calcSize(); // Divide video
setTimeout(loop, 1000/30); // drawing at 30fps
}
})();
}, 0);
function calcSize() {
video.width = w = window.innerWidth;
video.height = h = window.innerHeight;
tileWidth = w/columns;
tileHeight = h/rows;
ctx.strokeStyle = '#000';
render();
}
function render() {
for(var x = 0; x < columns; x++) {
ctx.moveTo(x * tileWidth, 0);
ctx.lineTo(x * tileWidth, h);
}
for(var y = 0; y < rows; y++) {
ctx.moveTo(0, y * tileHeight);
ctx.lineTo(w, y * tileHeight);
}
ctx.stroke();
}
so gerade jetzt zeichnen Sie gerade ein Raster über Ihr Video richtig? Du musst die Koordinaten deiner Zellen mit den Cropping-Optionen von [drawImage] (https://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/drawImage) verwenden, um dein Video zu teilen. – Kaiido